国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

PyTorch消除訓(xùn)練瓶頸 提速技巧

共 8365字,需瀏覽 17分鐘

 ·

2021-01-06 21:05

【GiantPandaCV導(dǎo)讀】訓(xùn)練大型的數(shù)據(jù)集的速度受很多因素影響,由于數(shù)據(jù)集比較大,每個優(yōu)化帶來的時間提升就不可小覷。硬件方面,CPU、內(nèi)存大小、GPU、機(jī)械硬盤orSSD存儲等都會有一定的影響。軟件實(shí)現(xiàn)方面,PyTorch本身的DataLoader有時候會不夠用,需要額外操作,比如使用混合精度、數(shù)據(jù)預(yù)讀取、多線程讀取數(shù)據(jù)、多卡并行優(yōu)化等策略也會給整個模型優(yōu)化帶來非常巨大的作用。那什么時候需要采取這篇文章的策略呢?那就是明明GPU顯存已經(jīng)占滿,但是顯存的利用率很低。

本文將搜集到的資源進(jìn)行匯總,由于目前筆者訓(xùn)練的GPU利用率已經(jīng)很高,所以并沒有實(shí)際實(shí)驗(yàn),可以在參考文獻(xiàn)中看一下其他作者做的實(shí)驗(yàn)。

1. 硬件層面

CPU的話盡量看主頻比較高的,緩存比較大的,核心數(shù)也是比較重要的參數(shù)。

顯卡盡可能選現(xiàn)存比較大的,這樣才能滿足大batch訓(xùn)練,多卡當(dāng)讓更好。

內(nèi)存要求64G,4根16G的內(nèi)存條插滿絕對夠用了。

主板性能也要跟上,否則裝再好的CPU也很難發(fā)揮出全部性能。

電源供電要充足,GPU運(yùn)行的時候會對功率有一定要求,全力運(yùn)行的時候如果電源供電不足對性能影響還是比較大的。

存儲如果有條件,盡量使用SSD存放數(shù)據(jù),SSD和機(jī)械硬盤的在訓(xùn)練的時候的讀取速度不是一個量級。筆者試驗(yàn)過,相同的代碼,將數(shù)據(jù)移動到SSD上要比在機(jī)械硬盤上快10倍。

操作系統(tǒng)盡量用Ubuntu就可以(實(shí)驗(yàn)室用)

如何實(shí)時查看Ubuntu下各個資源利用情況呢?

  • GPU使用 watch -n 1 nvidia-smi 來動態(tài)監(jiān)控
  • IO情況,使用iostat命令來監(jiān)控
  • CPU情況,使用htop命令來監(jiān)控

筆者對硬件了解很有限,歡迎補(bǔ)充,如有問題輕噴。

2. 如何測試訓(xùn)練過程的瓶頸

如果現(xiàn)在程序運(yùn)行速度很慢,那應(yīng)該如何判斷瓶頸在哪里呢?PyTorch中提供了工具,非常方便的可以查看設(shè)計(jì)的代碼在各個部分運(yùn)行所消耗的時間。

瓶頸測試:https://pytorch.org/docs/stable/bottleneck.html

可以使用PyTorch中bottleneck工具,具體使用方法如下:

python?-m?torch.utils.bottleneck?/path/to/source/script.py?[args]

詳細(xì)內(nèi)容可以看上面給出的鏈接。

當(dāng)然,也可用cProfile這樣的工具來測試瓶頸所在,先運(yùn)行以下命令。

python?-m?cProfile?-o?100_percent_gpu_utilization.prof?train.py

這樣就得到了文件100_percent_gpu_utilization.prof

對其進(jìn)行可視化(用到了snakeviz包,pip install snakeviz即可)

snakeviz?100_percent_gpu_utilization.prof

可視化的結(jié)果如下圖所示:

在瀏覽器中打開就可以找到這張分析圖

其他方法:

#?Profile?CPU?bottlenecks
python?-m?cProfile?training_script.py?--profiling
#?Profile?GPU?bottlenecks
nvprof?--print-gpu-trace?python?train_mnist.py
#?Profile?system?calls?bottlenecks
strace?-fcT?python?training_script.py?-e?trace=open,close,read

還可以用以下代碼分析:

def?test_loss_profiling():
????loss?=?nn.BCEWithLogitsLoss()
????with?torch.autograd.profiler.profile(use_cuda=True)?as?prof:
????????input?=?torch.randn((8,?1,?128,?128)).cuda()
????????input.requires_grad?=?True

????????target?=?torch.randint(1,?(8,?1,?128,?128)).cuda().float()

????????for?i?in?range(10):
????????????l?=?loss(input,?target)
????????????l.backward()
????print(prof.key_averages().table(sort_by="self_cpu_time_total"))

3. 圖片解碼

PyTorch中默認(rèn)使用的是Pillow進(jìn)行圖像的解碼,但是其效率要比Opencv差一些,如果圖片全部是JPEG格式,可以考慮使用TurboJpeg庫解碼。具體速度對比如下圖所示:

各個庫圖片解碼方式對比(圖源德澎)

對于jpeg讀取也可以考慮使用jpeg4py庫(pip install jpeg4py),重寫一個loader即可。

存bmp圖也可以降低解碼耗時,其他方案還有recordIO,hdf5,pth,n5,lmdb等格式

4. 數(shù)據(jù)增強(qiáng)加速

在PyTorch中,通常使用transformer做圖片分類任務(wù)的數(shù)據(jù)增強(qiáng),而其調(diào)用的是CPU做一些Crop、Flip、Jitter等操作。

如果你通過觀察發(fā)現(xiàn)你的CPU利用率非常高,GPU利用率比較低,那說明瓶頸在于CPU預(yù)處理,可以使用Nvidia提供的DALI庫在GPU端完成這部分?jǐn)?shù)據(jù)增強(qiáng)操作。

Dali鏈接:https://github.com/NVIDIA/DALI

文檔也非常詳細(xì):

Dali文檔:https://docs.nvidia.com/deeplearning/sdk/dali-developer-guide/index.html

當(dāng)然,Dali提供的操作比較有限,僅僅實(shí)現(xiàn)了常用的方法,有些新的方法比如cutout需要自己搞。

具體實(shí)現(xiàn)可以參考這一篇:https://zhuanlan.zhihu.com/p/77633542

5. data Prefetch

Nvidia Apex中提供的解決方案

參考來源:https://zhuanlan.zhihu.com/p/66145913

Apex提供的策略就是預(yù)讀取下一次迭代需要的數(shù)據(jù)。

class?data_prefetcher():
????def?__init__(self,?loader):
????????self.loader?=?iter(loader)
????????self.stream?=?torch.cuda.Stream()
????????self.mean?=?torch.tensor([0.485?*?255,?0.456?*?255,?0.406?*?255]).cuda().view(1,3,1,1)
????????self.std?=?torch.tensor([0.229?*?255,?0.224?*?255,?0.225?*?255]).cuda().view(1,3,1,1)
????????#?With?Amp,?it?isn't?necessary?to?manually?convert?data?to?half.
????????#?if?args.fp16:
????????#?????self.mean?=?self.mean.half()
????????#?????self.std?=?self.std.half()
????????self.preload()

????def?preload(self):
????????try:
????????????self.next_input,?self.next_target?=?next(self.loader)
????????except?StopIteration:
????????????self.next_input?=?None
????????????self.next_target?=?None
????????????return
????????with?torch.cuda.stream(self.stream):
????????????self.next_input?=?self.next_input.cuda(non_blocking=True)
????????????self.next_target?=?self.next_target.cuda(non_blocking=True)
????????????#?With?Amp,?it?isn't?necessary?to?manually?convert?data?to?half.
????????????#?if?args.fp16:
????????????#?????self.next_input?=?self.next_input.half()
????????????#?else:
????????????self.next_input?=?self.next_input.float()
????????????self.next_input?=?self.next_input.sub_(self.mean).div_(self.std)

在訓(xùn)練函數(shù)中進(jìn)行如下修改:

原先是:

training_data_loader?=?DataLoader(
????dataset=train_dataset,
????num_workers=opts.threads,
????batch_size=opts.batchSize,
????pin_memory=True,
????shuffle=True,
)
for?iteration,?batch?in?enumerate(training_data_loader,?1):
????#?訓(xùn)練代碼

修改以后:

data,?label?=?prefetcher.next()
iteration?=?0
while?data?is?not?None:
????iteration?+=?1
????#?訓(xùn)練代碼
????data,?label?=?prefetcher.next()

用prefetch庫實(shí)現(xiàn)

https://zhuanlan.zhihu.com/p/97190313

安裝:

pip?install?prefetch_generator

使用:

from?torch.utils.data?import?DataLoader
from?prefetch_generator?import?BackgroundGenerator

class?DataLoaderX(DataLoader):

????def?__iter__(self):
????????return?BackgroundGenerator(super().__iter__())

然后用DataLoaderX替換原本的DataLoader

cuda.Steam加速拷貝過程

https://zhuanlan.zhihu.com/p/97190313

實(shí)現(xiàn):

class?DataPrefetcher():
????def?__init__(self,?loader,?opt):
????????self.loader?=?iter(loader)
????????self.opt?=?opt
????????self.stream?=?torch.cuda.Stream()
????????#?With?Amp,?it?isn't?necessary?to?manually?convert?data?to?half.
????????#?if?args.fp16:
????????#?????self.mean?=?self.mean.half()
????????#?????self.std?=?self.std.half()
????????self.preload()

????def?preload(self):
????????try:
????????????self.batch?=?next(self.loader)
????????except?StopIteration:
????????????self.batch?=?None
????????????return
????????with?torch.cuda.stream(self.stream):
????????????for?k?in?self.batch:
????????????????if?k?!=?'meta':
????????????????????self.batch[k]?=?self.batch[k].to(device=self.opt.device,?non_blocking=True)

????????????#?With?Amp,?it?isn't?necessary?to?manually?convert?data?to?half.
????????????#?if?args.fp16:
????????????#?????self.next_input?=?self.next_input.half()
????????????#?else:
????????????#?????self.next_input?=?self.next_input.float()

????def?next(self):
????????torch.cuda.current_stream().wait_stream(self.stream)
????????batch?=?self.batch
????????self.preload()
????????return?batch

調(diào)用:

#?----改造前----
for?iter_id,?batch?in?enumerate(data_loader):
????if?iter_id?>=?num_iters:
????????break
????for?k?in?batch:
????????if?k?!=?'meta':
????????????batch[k]?=?batch[k].to(device=opt.device,?non_blocking=True)
????run_step()
????
#?----改造后----
prefetcher?=?DataPrefetcher(data_loader,?opt)
batch?=?prefetcher.next()
iter_id?=?0
while?batch?is?not?None:
????iter_id?+=?1
????if?iter_id?>=?num_iters:
????????break
????run_step()
????batch?=?prefetcher.next()

國外大佬實(shí)現(xiàn)

數(shù)據(jù)加載部分

import?threading
import?numpy?as?np
import?cv2
import?random?

class?threadsafe_iter:
??"""Takes?an?iterator/generator?and?makes?it?thread-safe?by
??serializing?call?to?the?`next`?method?of?given?iterator/generator.
??"""

??def?__init__(self,?it):
????self.it?=?it
????self.lock?=?threading.Lock()

??def?__iter__(self):
????return?self

??def?next(self):
????with?self.lock:
??????return?self.it.next()

def?get_path_i(paths_count):
??"""Cyclic?generator?of?paths?indice
??"""

??current_path_id?=?0
??while?True:
????yield?current_path_id
????current_path_id????=?(current_path_id?+?1)?%?paths_count

class?InputGen:
??def?__init__(self,?paths,?batch_size):
????self.paths?=?paths
????self.index?=?0
????self.batch_size?=?batch_size
????self.init_count?=?0
????self.lock?=?threading.Lock()?#mutex?for?input?path
????self.yield_lock?=?threading.Lock()?#mutex?for?generator?yielding?of?batch
????self.path_id_generator?=?threadsafe_iter(get_path_i(len(self.paths)))?
????self.images?=?[]
????self.labels?=?[]
????
??def?get_samples_count(self):
????"""?Returns?the?total?number?of?images?needed?to?train?an?epoch?"""
????return?len(self.paths)

??def?get_batches_count(self):
????"""?Returns?the?total?number?of?batches?needed?to?train?an?epoch?"""
????return?int(self.get_samples_count()?/?self.batch_size)

??def?pre_process_input(self,?im,lb):
????"""?Do?your?pre-processing?here
????????????????Need?to?be?thread-safe?function"""

????return?im,?lb

??def?next(self):
????return?self.__iter__()

??def?__iter__(self):
????while?True:
??????#In?the?start?of?each?epoch?we?shuffle?the?data?paths????????????
??????with?self.lock:?
????????if?(self.init_count?==?0):
??????????random.shuffle(self.paths)
??????????self.images,?self.labels,?self.batch_paths?=?[],?[],?[]
??????????self.init_count?=?1
??????#Iterates?through?the?input?paths?in?a?thread-safe?manner
??????for?path_id?in?self.path_id_generator:?
????????img,?label?=?self.paths[path_id]
????????img?=?cv2.imread(img,?1)
????????label_img?=?cv2.imread(label,1)
????????img,?label?=?self.pre_process_input(img,label_img)
????????#Concurrent?access?by?multiple?threads?to?the?lists?below
????????with?self.yield_lock:?
??????????if?(len(self.images))?????????????self.images.append(img)
????????????self.labels.append(label)
??????????if?len(self.images)?%?self.batch_size?==?0:????????????????????
????????????yield?np.float32(self.images),?np.float32(self.labels)
????????????self.images,?self.labels?=?[],?[]
??????#At?the?end?of?an?epoch?we?re-init?data-structures
??????with?self.lock:?
????????self.init_count?=?0
??def?__call__(self):
????return?self.__iter__()

使用方法:

class?thread_killer(object):
??"""Boolean?object?for?signaling?a?worker?thread?to?terminate
??"""

??def?__init__(self):
????self.to_kill?=?False
??
??def?__call__(self):
????return?self.to_kill
??
??def?set_tokill(self,tokill):
????self.to_kill?=?tokill
??
def?threaded_batches_feeder(tokill,?batches_queue,?dataset_generator):
??"""Threaded?worker?for?pre-processing?input?data.
??tokill?is?a?thread_killer?object?that?indicates?whether?a?thread?should?be?terminated
??dataset_generator?is?the?training/validation?dataset?generator
??batches_queue?is?a?limited?size?thread-safe?Queue?instance.
??"""

??while?tokill()?==?False:
????for?batch,?(batch_images,?batch_labels)?\
??????in?enumerate(dataset_generator):
????????#We?fill?the?queue?with?new?fetched?batch?until?we?reach?the?max???????size.
????????batches_queue.put((batch,?(batch_images,?batch_labels))\
????????????????,?block=True)
????????if?tokill()?==?True:
??????????return

def?threaded_cuda_batches(tokill,cuda_batches_queue,batches_queue):
??"""Thread?worker?for?transferring?pytorch?tensors?into
??GPU.?batches_queue?is?the?queue?that?fetches?numpy?cpu?tensors.
??cuda_batches_queue?receives?numpy?cpu?tensors?and?transfers?them?to?GPU?space.
??"""

??while?tokill()?==?False:
????batch,?(batch_images,?batch_labels)?=?batches_queue.get(block=True)
????batch_images_np?=?np.transpose(batch_images,?(0,?3,?1,?2))
????batch_images?=?torch.from_numpy(batch_images_np)
????batch_labels?=?torch.from_numpy(batch_labels)

????batch_images?=?Variable(batch_images).cuda()
????batch_labels?=?Variable(batch_labels).cuda()
????cuda_batches_queue.put((batch,?(batch_images,?batch_labels)),?block=True)
????if?tokill()?==?True:
??????return

if?__name__?=='__main__':
??import?time
??import?Thread
??import?sys
??from?Queue?import?Empty,Full,Queue
??
??num_epoches=1000
??#model?is?some?Pytorch?CNN?model
??model.cuda()
??model.train()
??batches_per_epoch?=?64
??#Training?set?list?suppose?to?be?a?list?of?full-paths?for?all
??#the?training?images.
??training_set_list?=?None
??#Our?train?batches?queue?can?hold?at?max?12?batches?at?any?given?time.
??#Once?the?queue?is?filled?the?queue?is?locked.
??train_batches_queue?=?Queue(maxsize=12)
??#Our?numpy?batches?cuda?transferer?queue.
??#Once?the?queue?is?filled?the?queue?is?locked
??#We?set?maxsize?to?3?due?to?GPU?memory?size?limitations
??cuda_batches_queue?=?Queue(maxsize=3)


??training_set_generator?=?InputGen(training_set_list,batches_per_epoch)
??train_thread_killer?=?thread_killer()
??train_thread_killer.set_tokill(False)
??preprocess_workers?=?4


??#We?launch?4?threads?to?do?load?&&?pre-process?the?input?images
??for?_?in?range(preprocess_workers):
????t?=?Thread(target=threaded_batches_feeder,?\
???????????args=(train_thread_killer,?train_batches_queue,?training_set_generator))
????t.start()
??cuda_transfers_thread_killer?=?thread_killer()
??cuda_transfers_thread_killer.set_tokill(False)
??cudathread?=?Thread(target=threaded_cuda_batches,?\
???????????args=(cuda_transfers_thread_killer,?cuda_batches_queue,?train_batches_queue))
??cudathread.start()

??
??#We?let?queue?to?get?filled?before?we?start?the?training
??time.sleep(8)
??for?epoch?in?range(num_epoches):
????for?batch?in?range(batches_per_epoch):
??????
??????#We?fetch?a?GPU?batch?in?0's?due?to?the?queue?mechanism
??????_,?(batch_images,?batch_labels)?=?cuda_batches_queue.get(block=True)
????????????
??????#train?batch?is?the?method?for?your?training?step.
??????#no?need?to?pin_memory?due?to?diminished?cuda?transfers?using?queues.
??????loss,?accuracy?=?train_batch(batch_images,?batch_labels)

??train_thread_killer.set_tokill(True)
??cuda_transfers_thread_killer.set_tokill(True)????
??for?_?in?range(preprocess_workers):
????try:
??????#Enforcing?thread?shutdown
??????train_batches_queue.get(block=True,timeout=1)
??????????????????cuda_batches_queue.get(block=True,timeout=1)????
????except?Empty:
??????pass
??print?"Training?done"

6. 多GPU并行處理

PyTorch中提供了分布式訓(xùn)練API, nn.DistributedDataParallel, 推理的時候也可以使用nn.DataParallel或者nn.DistributedDataParallel。

推薦一個庫,里面實(shí)現(xiàn)了多種分布式訓(xùn)練的demo: https://github.com/tczhangzhi/pytorch-distributed 其中包括:

  • nn.DataParallel
  • torch.distributed
  • torch.multiprocessing
  • apex再加速
  • horovod實(shí)現(xiàn)
  • slurm GPU集群分布式

7. 混合精度訓(xùn)練

mixed precision yyds,之前分享過mixed precision論文閱讀,實(shí)現(xiàn)起來非常簡單。在PyTorch中,可以使用Apex庫。如果用的是最新版本的PyTorch,其自身已經(jīng)支持了混合精度訓(xùn)練,非常nice。

簡單來說,混合精度能夠讓你在精度不掉的情況下,batch提升一倍。其原理就是將原先float point32精度的數(shù)據(jù)變?yōu)閒loat point16的數(shù)據(jù),不管是數(shù)據(jù)傳輸還是訓(xùn)練過程,都極大提升了訓(xùn)練速度,煉丹必備。

8. 其他細(xì)節(jié)

batch_images?=?batch_images.pin_memory()?
Batch_labels?=?Variable(batch_labels).cuda(non_blocking=True)?
  • PyTorch的DataLoader有一個參數(shù)pin_memory,使用固定內(nèi)存,并使用non_blocking=True來并行處理數(shù)據(jù)傳輸。

  • torch.backends.cudnn.benchmark=True

  • 及時釋放掉不需要的顯存、內(nèi)存。

  • 如果數(shù)據(jù)集比較小,直接將數(shù)據(jù)復(fù)制到內(nèi)存中,從內(nèi)存中讀取可以極大加快數(shù)據(jù)讀取的速度。

  • 調(diào)整workers數(shù)量,過少的線程讀取數(shù)據(jù)會導(dǎo)致速度非常慢,過多線程讀取數(shù)據(jù)可能會由于阻塞也導(dǎo)致速度非常慢。所以需要根據(jù)自己機(jī)器的情況,嘗試不同數(shù)量的workers,選擇最合適的數(shù)量。一般設(shè)置為 cpu 核心數(shù)或gpu數(shù)量

  • 編碼的時候要注意盡可能減少CPU和GPU之間的數(shù)據(jù)傳輸,使用類似numpy的編碼方式,通過并行的方式來處理,可以提高性能。

  • 使用TFRecord或者LMDB等,減少小文件的讀寫

9. 參考文獻(xiàn)

【1】https://zhuanlan.zhihu.com/p/66145913

【2】https://pytorch.org/docs/stable/bottleneck.html

【3】https://blog.csdn.net/dancer__sky/article/details/78631577

【4】https://sagivtech.com/2017/09/19/optimizing-pytorch-training-code/

【5】https://zhuanlan.zhihu.com/p/77633542

【6】https://github.com/NVIDIA/DALI

【7】https://zhuanlan.zhihu.com/p/147723652

【8】https://www.zhihu.com/question/356829360/answer/907832358


歡迎加入GiantPandaCV微信交流群,可以添加筆者微信入群交流。


瀏覽 72
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久草视频这里只有精品| 国产主播专区| 亚洲免费观看高清完整版在va线观 | 国产黄色视频在线播放| 国产av一级片| 四虎在线视频观看96| 99久久精品国产一区二区成人| 性爱免费视频| 97国产成人| 日韩三级小说| jizz免费在线观看| 亚洲中文在线播放| 亚洲天堂在线观看免费视频| 91青青| 无码在线观看免费| 无码一区二区三区免费| av在线三级| 欧美77777| 欧美成人精品激情在线观看| 中文字幕av无码| 欧亚一区二区| 亚洲无码福利视频| 波多野结衣在线精品| 天天操网站| 韩日av| 亚洲AV无码专区一级婬片毛片 | 中文字幕综合在线| 亚洲成人视屏| 亚洲加勒比久久88色综合| 伊人99热| 亚洲AV人人夜夜澡人人| 99热在线免费观看| 91成人视频在线免费观看| 成人网站在线免费观看| 天堂AV在线免费观看| 欧美footjob| 中文字幕一区在线| 国产在线观看97| 中文字幕在线观看不卡| 黄片WWW| 亚洲综合一区二区| 欧美亚洲精品在线| 大香蕉777| 99精品视频16在线免费观看| 国产一级美女操逼视频免费播放| 性无码一区二区三区在线观看| 成人区123| 欧美激情无码一区二区三区张丽 | 无码人妻一区二区三区免水牛视频| 91九色丨国产丨爆乳| 国产高清A片| 精品无码久久| 国产成人综合网| 国产人成视频| 久艹在线| 日韩大香蕉网| 亚洲三级网站| 超碰人人操在线| 色吧五月| 无码一区三区| 国产av日韩av| 日韩看片| 九九国产| 国产精品国产三级国产专区52 | 四季AV综合网站| 蜜臀av网站| 日本免费一区二区三区| 日韩精品免费无码视频| 日本肏逼视频| 国产成人免费在线| 国产成人精品免费看视频| 久久亚洲日韩天天做日日做综合亚洲| 亚洲高清无码在线视频| 日本免费在线黄色视频| 亚洲AV秘无码一区二三月夜| 日韩AⅤ| 日韩久久久| 一区二区三区不卡视频| 免费做a爰片77777| 污污污污污www在线观看优势| 日韩久久网| 精品亚洲一区二区三区四区五区| 久久婷婷影院| 色综合久久88色综合天天| 国产草莓视频| 欧美一级黄片免费看| 亚洲黄色免费网站| 精品一区二区三区免费| 成人伊人AV| 91精品一区二区| 成人午夜福利高清视频| 伊人视频网| 国产亲子乱A片免费视频| 精品国产成人a在线观看| 国产福利在线导航| 日韩欧美高清| 91视频色| 色悠悠久久综合| 久久六月天| 悠悠色影院| 亚洲www在线观看| 亚洲成人在线视频免费观看| 成人自拍视频| 天天日夜夜艹| 亚洲无码专区视频| 人人操人人看人人干| www.黄| 无码a片| 国产精品秘ThePorn| 欧美久久一区二区三区四区视频| 乱婬妺妺躁爽A片| 美女福利在线| 免费看毛片的网站| 日本麻豆| 日韩国产在线观看| 麻豆视频国产| 国产伦精品一区二区三区视频女| 成人才看的在线视频| 被黑人猛躁4O次高潮| 肏屄视频在线| 天堂a在线| jizz国产视频| 婷婷五月在线播放| 91在线无码精品秘| 日本少妇做爱| 另类老妇极品BBWBBw| www国产| 婷婷五月丁香五月| 狠狠视频| 国产又粗又长视频| 91综合视频在线播放| 思思操在线视频| 欧美日韩视频| 国产高清精品软件丝瓜软件| 日本a在线观看| 欧美熟妇BBB搡BBB| 亚洲美女网站免费观看网址| 一区无码视频| 福利一区二区视频网| 在线无码AV| 日本高清无码视频| 国产午夜视频在线| 人人看,人人摸| 91精品少妇| 欧美在线亚洲| 蜜柚Av| 五月天啪啪| 江苏妇搡BBBB搡BBB| 亚洲福利网| 日日夜夜老司机| 初学影院WWWBD英语完整版在线观看 | 奇米色色色| 偷拍-91爱爱| 亚洲内射无码| 色丁香视频在线观看的| 亚洲精品福利| jk在线观看| 黄色动漫在线免费观看| 黄色片免费看| 日韩色情视频| 超碰天天| 午夜亚洲福利| 人人妻人人上| 日韩丰满人妻| 天堂视频在线| 就要草| ThePorn-成人网站入口| 99久久大香蕉| 午夜偷拍网站| 久久91| 日韩一级免费视频| 国产午夜在线视频| 久久久久成人精品无码| 国产18禁网站| 精品国产123| 国产精品怡红院有限公司| 水果派av| 中文字幕熟女人妻| 免费在线观看黄视频| 国产热99| 少妇厨房愉情理伦BD在线观| 蜜桃视频免费网站| 最近中文字幕在线视频| 一区二区高清无码| 深爱五月婷婷| 人人干人人操人人摸| A一级黄色片| 青青色在线视频| 成人TV| 大鸡巴操B视频| 最新久欠一区二区免费看| 操B网站| 伊人99| 免费看黃色AAAAAA片| 国产一a毛一a毛A免费| 日韩AV一级| 97亚洲视频| 99热只有精| 亚洲国产色婷婷| 一区在线看| 一级黄片学生妹| 午夜色色福利| 日韩中文视频| 亚洲无码免费看| 狠狠干狠狠草| 日本无码在线播放| 一道本AV| 日韩一二三区| 97自拍视频| 少妇bbw搡bbbb搡bbbb| 肏逼视频网站| 久久久久精| 亚洲男人天堂AV| 中文字幕在线不卡视频| 色操网| 久久久久久9| 深爱激情五月婷婷| 久久久久久少妇| 一区二区三区四区无码在线| 91丨PORN首页| 高清不卡一区二区| 色五月婷婷小说| 欧美三区四区| 夜夜嗨av| 午夜成人无码| 无码在线免费视频| 91人人妻人人澡人人爽| 91人人人| 99免费精品视频| 91人妻无码精品一区二区| 久久aaa| 亚洲精品国产成人综合久久久久久久久 | 亚洲日韩中文字幕无码| 天天日天天爱| 亚洲无码高清电影| 午夜成人精品一区二区三区| 国产91嫩草乱婬A片2蜜臀| 伊人网视频在线播放| 国产91www| 大香蕉久操网| 一级a片在线播放| 黄色电影一级| 青娱乐成人在线视频| 欧美在线操| 在线免费观看成人网站| 日韩中文AV| 欧美91视频| 三级片网站在线观看| 操逼操123| 哪里能看毛片| 尤物最新网址| 插插菊花综合网| 高清无码免费在线| 97超碰免费| 亚洲黄色在线观看| 国产一级a毛一级a毛片视频黑人| 肏逼在线观看| 91一级A片在线观看| 国产一级二级三级久久久| 成人动漫| 一本无码视频| 久久久久婷婷| AAA免费视频| 韩国av在线| 在线观看av网站中文字幕| 日本少妇久久| 欧美在线视频你懂的| 美女一级A片| 一区二区三区网站| 不卡的av在线| 影音AV| 国产黄色免费看| 久久1234| 国产又粗又长又硬又大毛苴茸图片| 欧美激情国产精品| 一级黄影| 东京热在线免费观看| 久久亚洲天堂| 久久久噜噜噜久久中文字幕色伊伊 | 可以免费看av的网站| 久久久久无码国产精品不卡| anwuye官方网站| AV色站| 国产美女操逼| AAA激情| 婷婷五月亚洲精品AAA片在| 91麻豆精品在线观看| 国产三级片在线观看视频| 囯产精品久久久久久久久| 中文字幕偷拍| 亚洲天堂女| 日韩三级视频在线观看| 久色婷婷| AV在线一区二区| 婷婷五月天激情四射| 亚洲AV无码一区二区三竹菊| 国产一级AA片| 大香蕉综合久久| 99国产精品免费视频观看8| 动漫3d啪啪成人h动漫| 淫荡五月天视频导航| 日韩精品一区二区三区在线观看免费 | 一级A片黄色| 色天使av| 韩日毛片| 成年人性生活免费视频| 俺来也俺去也www色官| 狠狠色婷婷777| 日韩无码激情| 国产人与禽zoz0性伦| 啪啪视频在线观看| 亚洲午夜在线观看| 欧美浮力| 老熟女--91XX| 日韩性爱在线观看| 人人操人人摸人人| 人人妻人人澡人人爽久久| 五月天婷婷综合网| 免费黄片视频在线观看| 亚洲免费观看高清| 操日韩美女| 久久精品国产亚洲AV成人婷婷 | 久色视频| 国产在线精品自拍| 热的无码| 天天干天天干天天| 91大神在线免费观看| 江苏妇搡BBB搡BBBB| 色婷婷18| 国产一级a毛一级a做免费的视频| 污视频网站在线观看| 午夜av在线观看| 91熟女丰满原味| 欧产日产国产swag| av在线资源播放| 五月天久久久| 欧美人人插| 中文字幕在线一区二区a| 丁香六月天| www.日韩系列| 久久精品在线播放| 国产黄色影院| 四虎影院最新地址| 精品视频第一页| 黄片视频大全| 91精品人妻一区二区三区四区| 可以在线观看的av| 东京热久久综合色五月老师| www.xxx国产| 一级a一级a免费观看视频Al明星 | 巨乳一区二区三区| 俺来也在线视频| 久久99九九| 久久无码人妻精品一区二区三区| 免费欧美性爱视频| 三级电影久久麻豆| 国产内射网站| 无码人妻一区二区三区精品不付款 | 日韩一级黄| 7777精品伊人久久7777| 天天色天天爱| 欧美A视频在线观看| 一插菊花综合| 91人人| 嫩BBB搡BBBB搡BBBB-百度| 国产一级a毛一级a做免费图片| 亚洲精品国产精品乱码视99| 中文字幕黄色片| 91狠狠综合久久| 无码AV电影在线观看| 男男做受A片AAAA| 先锋影音亚洲AV每日资源网站| 亚洲中文字幕在线视频观看| 麻豆传媒嫂子| 国产成人精品无码区在线| 中文字幕毛片| 婷婷成人视频| 中文字幕在线观看av| 国产乱子伦| 久草新在线| 狠狠撸综合| 91在线无码精品秘蜜桃入口| 色五月婷婷五月天激情| 337p西西人体大胆瓣开下部| 国产激情视频在线免费观看| www九九九| 免费看性蜜桃| 日韩乱伦中文字幕| 网站色色免费看| 日韩黄色在线视频| 國產美女AV操逼網站| 黄色精品网站| 成人网肏逼视频| 国产操逼免费视频| 天天干天天日天天操| 亚洲精品秘一区二区三区在线观看 | 北条麻妃在线视频| 91人妻人人操| 久久精品999| 国产一区| 色九九九九| 香蕉成人视频| 插插插视频| 亚洲欧美高清视频| 亚洲免费中文字幕| 日韩少妇AV| 天天干,夜夜操| 韩日av| 日韩爱爱| 干老女人逼| 成人黄色毛片| 久热激情| 韩国AV三级| 亚洲视频a| 爱爱天堂| 国产激情无码视频| 久久精品五月天| 91九色丨国产丨爆乳| 高清无码视频观看| 国产国产国产在线无码视频| www.日韩欧美| 伊人天天色| 特逼视频| 日韩欧美高清无码| 欧美日韩A片| 久久精品一区二区三区不卡牛牛| 中文字幕日本欧美| 911久久| 欧美18成人| 天堂视频在线| 一级a免一级a做免费线看内裤的注意事项 | 亚洲日韩AV无码| av黄色网| 操逼视频国产| 五月婷婷色播| 精品国产成人| 99re久久| 日本有码在线| 伊人三级| 97人妻精品一区二区三区| 亚洲视频大全| 精品国产自| 香蕉伊人在线| 免费Av在线| 国产精品久久久久久久久久二区三区| www.俺来也| 亚洲日韩一级| 秒播福利| 亚洲爱爱视频| 中文无码网站| 欧美色图第一页| 午夜福利aaa| 自慰喷水在线观看| 99在线视频观看| 亚洲色一区二区| 99久久久无码国产精品性波多| 精品国产乱码久久久久夜深人妻| aa无码| 精品99999| a片免费网址| 露脸偷拍AV2025| 一级a一级a爱片免费视频| 黄片大全在线免费观看| av日韩在线播放| 五月天福利导航| 99黄色| 九九韩剧网最新电视剧免费观看 | 日本特级黄色毛片| 亚洲精品视频在线播放| 久久理论| 亚洲熟妇在线观看一区二区| 干欧美美女| 免费a在线观看| 可以在线观看的av| 啊啊啊啊啊靠逼| 激情无码av| 国产三级片网站| 福利导航网| 成年人免费电影| 青娱乐成人电影| 人妻无码精品久久人妻成人| 99视频精品| a一级黄片| 日韩字幕无码| 99人妻人人爽人人添人人精品| 国产精品77777| 自慰影院| 欧美综合区| 免费在线观看中文字幕| 久精品视频| 亚洲A片V一区二区三区| 久久久久久免费| 四川揉BBB搡BBB| 色妞视频精品一区| 天天干天天射天天操| 国产婷婷色一区二区三区| 国产高清无码在线观看视频| 九九成人精品| 国产精品探花熟女| 看国产AA免费| 波多野结衣无码视频在线观看| 中文字幕精品亚洲熟女| 国产a片免费看| 婷婷高清无码| 88av在线播放| 蜜桃视频成人版网站| 黄色视频一区二区| 久精品视频| 亚洲无码福利视频| 91人妻人人澡人人| 国产精品免费一区二区三区都可以 | 人人干人人干人人| 色五月av| 香蕉AV777XXX色综合一区| 91精品成人电影| 骚逼日本| 日韩色图在线观看| 亚洲精品无码在线播放| 天堂AV色| 国产成人+综合亚洲+天堂| 久久成人精品| 国产黄色精品| 久久久久久精| A视频在线| 台湾成人视频| 免费的av网站| 操日本少妇| 欧美热热| 午夜免费无码| 亚洲在线观看中文字幕| 91色色色色| 国产操逼无码| 精品玖玖| 尤物视频入口| 亚洲欧洲久久| 艹逼逼视频| 91综合色| 日韩一级A| 人人爱人人操人人爽| 国产精品午夜在线观看| 日韩精品一区二区三免费视频 | 四虎永久www成人影院| 婷婷久久五月| jizzjizz国产| 欧美肏逼视频| 亚洲一级Av无码毛片久久精品| 国产成人精品一区二区三区在线 | 站街大龄熟女x| 日逼日逼日逼| 成年人A片| 丁香在线视频| 97在线观看免费视频| 成人激情在线观看| 婷婷色亚洲| 婷婷色综合| 国产XXXXX| 97在线免费视频| 欧美午夜福利视频| 成人在线视频网站| 操操操操操操| 亚洲网站在线观看| 五月丁香啪啪啪| 亚洲精品中文字幕在线| 人妻少妇偷人精品无码免费| 特级毛片在线观看| 日韩一区欧美| 精品国产一级A片黄毛网站| 91香蕉视频在线看| 99色热视频| 在线看v片| 久久精品导航| 欧美成年人网站| 特级艺体西西444WWw| 成人亚洲A片V一区二区三区蜜月| 日韩成人黄色电影| ThePorn人妻白浆| 五月天婷婷在线观看| 欧美性爱小说| 天堂A片电影网站在线观看| 四川少妇搡bbbb搡bbbb| 国产欧美在线免费观看| 中文字幕丰满的翔田千里| 日本A在线播放| 激情五月婷婷色| 成人色色网站| 天堂成人网| 国产成人无码A片免费看| 97中文字幕| 青青娱乐亚洲无| 免费观看成人毛片A片直播千姿| 欧美色色综合| 日韩无码一| 免费无码在线视频| 国产五月| h片在线观看免费| 国产区在线观看| 日日撸视频| 午夜性爱福利视频| 欧美日韩中文字幕视频| 男人插女人网站| 国产操逼大全| 午夜成人免费视频| 欧美黄色A片| 六月丁香五月| 亚洲高清无码一区二区| 色呦呦视频在线观看| 国产在线看| 综合av| 成人做爰A片免费看网站| 91小仙女jK白丝袜呻吟| 国产成人无码精品久在线观看| 中国a一片一级一片| 曰韩一级A片| 国产欧美二区综合中文字幕精品一 | 一道本无码在线| 日韩A√| 操逼激情视频| 偷拍亚洲欧美| 成人无码区免费| 日韩一区二区视频在线观看| 99久久婷婷国产综合精品hsex,亚| 久久久久久久久久8888| 在线观看免费黄色| 欧美成人高清无码| 国产视频999| 18成人网站在线观看| 一起操影院| 嫩BBB槡BBBB槡BBBB| 中文原创麻豆传媒md0052 | 免费一级黄色电影| 500部大龄熟乱4K视频| 学生妹一级J人片内射视频| 青青草激情视频| 欧美在线视频免费观看| 拍真实国产伦偷精品| 亚洲欧美网站| 精品99999| 日韩中文无码字幕| 日韩人妻无码专区| 欧美精产国品一| 一本大道久久久久| 日韩人妻精品中文字幕免费| 欧美另类综合| 亚洲欧美国产高清vA在线播放| 青青欧美| www黄色com| 国产一区二区不卡| 91视频免费在线看| 豆花天天吃最新视频| 正在播放JUQ-878木下凛凛子| 五月久久婷婷| 啪啪网网站| 色婷在线| 京东一热本色道久久爱| 国产成人超碰| 日本无码一区二区三区| 香蕉操逼| 亚洲无码免费网站| 亚洲一区2区| 中文字幕乱码中文乱码图片| 182AV| www.青草视频| 婷婷亚洲国产| 欧美成人精品激情在线观看| 51伦理| 色欲色欲一区二区三区| 亚洲操逼AV| 国产精品欧美日韩| www.毛片| 免费av观看| 91一起草高清资源| 欧美不卡一区二区| 在线视频一区二区| 可以免费看的黄色视频| 欧美色图888| 大香蕉日| 国产成人精品一区| 不卡的一区二区| 日本黄色录像| 豆花av在线| 蜜桃网站在线观看| 91在线网址| 女人操逼| 亚洲AV无码成人精品区欧洲| 国产青青| 无码三级在线观看| xxx综合网| 日韩中文在线观看| 高清一区二区| 麻豆免费福利视频| 国产视频第一页| 亚洲欧美性爱| 国产白嫩精品久久久久久| 你操综合| 国内精品国产成人国产三级| 99精品国产一区二区| 亚洲无码一二三| 狼友视频在线观看| 亚洲欧美第一页| 日本黄色视频免费| 亚洲精品无码更新| 毛片天堂| 欧美性爱免费在线视频| 精品国产久久久久| 亚洲区一区二| 男人视频网站| 欧美一级A片在线观看| 中文字幕在线不卡视频| 青青草免费观看视频| 国产棈品久久久久久久久久九秃| 欧洲操逼视频| 婷婷五月精品中文字幕| 久久逼逼| 欧美精产国品一二三产品动漫| 东方美美高清无码一区| 色综合五月| 黄片精品| 欧美二区视频| 91大神shunv| 要操逼网| 黄色激情在线| 一本色道久久综合无码人妻| 学生妹一级J人片内射视频| 91精品久久久久久| 婷婷色综合视频二区| 天堂8在线19| 中文字幕AV免费观看| 特级西西人体www高清大胆| 欧美mv日韩mv国产| 毛片黄色视频| 中文字幕777| 成人伊人大香蕉| 免费看操逼视频| 亚洲无码久久| 狠狠色狠狠操| 成人一级黄色电影| 日本黄色免费在线观看| 91大神免费在线观看| 欧美后门菊门交3p| 成人a一级片| 日韩成人观看| 香蕉操逼小视频| 91香蕉网| 99视频热| 米奇色色色| 欧美黑吊大战白妞欧美大片| 亚洲中文字幕无码在线观看| 亚洲欧洲视频在线观看| 北京熟妇搡BBBB搡BBBB电影 | 91在线网站| 久久久桃色| 一本免费视频| 国产av小电影| 在线免费观看网站| 亚洲无码观看视频| 欧美黑吊大战白妞欧美大片| 亚洲精品影院| 永久免费看A人片无码精| 黄色美女毛片| 免费的一级片| 国产区欧美去区在线| av片在线免费观看| 一级爱爱免费视频| 淫荡五月天视频导航| 日韩在线高清视频| 亚洲免费天堂| www五月天| 日韩熟妇无码中文字幕| 欧美中文字幕在线播放| 免费三级网| 国产电影一区二区三区| 国产系列每日更新| 亚洲成人无码片| 九色91PORNY国产| 国产免费av片| 草久视频| 丁香六月婷婷综合| 久热最新| 国产AV黄| 中文字幕在线观看日本| 无码精品视频在线观看| av毛片| 逼逼爱插插网站| 欧美一级A片在免费看| h片在线免费观看视频| 91久久久久久久久久久| 五月天最新网址| 韩日一区二区三区| 免费在线性爱视频| 免费黄片网站在线观看| 97人妻人人澡人人| 国产精彩视频| 狠狠操免费| 国产91在线视频| 国产一级片网站| 国产精品丝袜| 天天添| 污视频免费在线观看| 国产精品免费av在线| 国产乱码一区二区三区| AV香蕉| 日韩黄色在线| 中文字幕有码视频| 91国产精品视频在线| 午夜丁香婷婷| 成人精品视频在线| 国产精品成人免费精品自在线观看 | 91精品久久香蕉国产线看观看| 丁月婷婷五香天日五月天| 伊人成人网视频| 蜜桃传媒视频| 亚洲超碰在线| 99热大香蕉| 黄色a在线| 熟妇熟女一区二区三区| 影音先锋资源站| 日韩中文字幕在线播放| 国产在线色视频| 内射老熟女| 亚洲69视频| 强伦轩人妻一区二区三区最新版本更新内容 | 亚洲国产精品成人综合色五月| 无码欧美精品一区二区| 性淫影院| 99视频在线观看免费| 午夜操逼| 中文字幕东京热| 国产剧情91| 成人做爰A片一区二区app| 久久99精品国产麻豆婷婷洗澡| 2018天天日天天操| 亚洲精品秘一区二区三小| 高h视频在线观看| 欧美日本色| 欧美成人网址在线观看| 亚洲一区二区黄色电影视频网站| 日韩免费高清无码| 国产在线视频一区二区| 国产污视频在线观看| 北条麻妃在线播放一区| 色色五月婷婷| 日本狠狠操| 黄色电影天堂网站| 自拍超碰| jk无码| 亚洲中文字幕在| 欧美中文在线观看| 欧美在线观看视频| 亚洲视频观看| 免费看一级黄色片| 91狠狠综合久久| 96精品久久久久久久久久| а中文在线天堂精品| 午夜性视频| 国产成人无码区免费视频| 中文字幕日本成人| 国产精品视频福利| 欧美日韩中国操逼打炮| 激情麻豆论坛| 伊人大香焦网| 婷色| 五月婷婷中文字幕| 欧美XX888做受| 日韩精品一区二区三区四区| 国产成人自拍网| 亚洲V国产v欧美v久久久久久| 久久三级视频| 俺去也俺去啦| 日韩欧美国产精品| 操骚逼视频| 天堂网2018| 黄色直播在线观看| 亚洲激情| 好男人一区二区三区在线观看| 麻豆视频一区| 久久草成人网| 国产超碰青青草| 无码成人av| 香蕉漫画在线观看18| 69人人| 正在播放JUQ-878木下凛凛子| 久久99久久99久久| 成人性爱视频网| 久久99老妇伦国产熟女| 极品少妇视频| 特级西西444WWW无码视频兔费看| 男女啪啪免费网站| 国产精品一级无码免费播放| 我和岳m愉情XXXⅩ视频| 97无码人妻| 日日骚亚洲| 欧洲成人在线观看| 欧美伊人| 欧美午夜性爱视频| 91爱爱网| 中文字幕日韩无码片| 精品成人在线观看| 男女av免费观看| 日韩无码视频免费| 69er小视频|