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

PyTorch 源碼解讀之 torch.cuda.amp: 自動(dòng)混合精度詳解

共 11758字,需瀏覽 24分鐘

 ·

2021-02-25 21:52

點(diǎn)藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師

設(shè)為星標(biāo),干貨直達(dá)!

AI編輯:我是小將

本文作者:OpenMMLab?@202011

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

本文已由原作者授權(quán)轉(zhuǎn)載


Nvidia 在 Volta 架構(gòu)中引入 Tensor Core 單元,來支持 FP32 和 FP16 混合精度計(jì)算。也在 2018 年提出一個(gè) PyTorch 拓展 apex,來支持模型參數(shù)自動(dòng)混合精度訓(xùn)練。自動(dòng)混合精度(Automatic Mixed Precision, AMP)訓(xùn)練,是在訓(xùn)練一個(gè)數(shù)值精度 FP32 的模型,一部分算子的操作時(shí),數(shù)值精度為 FP16,其余算子的操作精度是 FP32,而具體哪些算子用 FP16,哪些用 FP32,不需要用戶關(guān)心,amp 自動(dòng)給它們都安排好了。這樣在不改變模型、不降低模型訓(xùn)練精度的前提下,可以縮短訓(xùn)練時(shí)間降低存儲(chǔ)需求,因而能支持更多的 batch size、更大模型和尺寸更大的輸入進(jìn)行訓(xùn)練。PyTorch 從 1.6 以后(在此之前 OpenMMLab 已經(jīng)支持混合精度訓(xùn)練,即 Fp16OptimizerHook),開始原生支持 amp,即torch.cuda.amp module。2020 ECCV,英偉達(dá)官方做了一個(gè)?tutorial?推廣 amp。從官方各種文檔網(wǎng)頁 claim 的結(jié)果來看,amp 在分類、檢測、圖像生成、3D CNNs、LSTM,以及 NLP 中機(jī)器翻譯、語義識(shí)別等應(yīng)用中,都在沒有降低模型訓(xùn)練精度都前提下,加速了模型的訓(xùn)練速度。

本文是對(duì)torch.cuda.amp工作機(jī)制,和 module 中接口使用方法介紹,以及在算法角度上對(duì) amp 不掉點(diǎn)原因進(jìn)行分析,最后補(bǔ)充一點(diǎn)對(duì) amp 存儲(chǔ)消耗的解釋。

1. 混合精度訓(xùn)練機(jī)制

torch.cuda.amp?給用戶提供了較為方便的混合精度訓(xùn)練機(jī)制,“方便”體現(xiàn)在兩個(gè)方面:

  • 用戶不需要手動(dòng)對(duì)模型參數(shù) dtype 轉(zhuǎn)換,amp 會(huì)自動(dòng)為算子選擇合適的數(shù)值精度

  • 對(duì)于反向傳播的時(shí)候,FP16 的梯度數(shù)值溢出的問題,amp 提供了梯度 scaling 操作,而且在優(yōu)化器更新參數(shù)前,會(huì)自動(dòng)對(duì)梯度 unscaling,所以,對(duì)用于模型優(yōu)化的超參數(shù)不會(huì)有任何影響

以上兩點(diǎn),分別是通過使用amp.autocastamp.GradScaler來實(shí)現(xiàn)的。

autocast可以作為 Python 上下文管理器和裝飾器來使用,用來指定腳本中某個(gè)區(qū)域、或者某些函數(shù),按照自動(dòng)混合精度來運(yùn)行。混合精度在操作的時(shí)候,是先將 FP32 的模型的參數(shù)拷貝一份,拷貝的參數(shù)轉(zhuǎn)換成 FP16,而 amp 規(guī)定了的 FP16 的算子(例如卷積、全連接),對(duì) FP16 的數(shù)值進(jìn)行操作;FP32 的算子(例如涉及 reduction 的算子,BatchNormalize,softmax...),輸入和輸出是 FP16,計(jì)算的精度是 FP32。在反向傳播時(shí),依然是混合精度計(jì)算,得到數(shù)值精度為 FP16 的梯度。最后,由于 GPU 中的 Tensor Core 天然支持 FP16 乘積的結(jié)果與 FP32 的累加(Tensor Core math),優(yōu)化器的操作是利用 FP16 的梯度對(duì) FP32 的參數(shù)進(jìn)行更新。



對(duì)于 FP16 不可避免的問題就是:表示的范圍較窄,如下圖所示,大量非 0 梯度會(huì)遇到溢出問題。解決辦法是:對(duì)梯度乘一個(gè)??的系數(shù),稱為 scale factor,把梯度 shift 到 FP16 的表示范圍。



GradScaler的工作就是在反向傳播前給 loss 乘一個(gè) scale factor,所以之后反向傳播得到的梯度都乘了相同的 scale factor。并且為了不影響學(xué)習(xí)率,在梯度更新前將梯度unscale??偨Y(jié)amp的基本訓(xùn)練流程:

  1. 維護(hù)一個(gè) FP32 數(shù)值精度模型的副本

  2. 在每個(gè)iteration

  3. 拷貝并且轉(zhuǎn)換成 FP16 模型

  4. 前向傳播(FP16 的模型參數(shù))

  5. loss 乘 scale factor?s

  6. 反向傳播(FP16 的模型參數(shù)和參數(shù)梯度)

  7. 參數(shù)梯度乘?1/s

  8. 利用 FP16 的梯度更新 FP32 的模型參數(shù)

但是,這里會(huì)有一個(gè)問題,scale factor 應(yīng)該如何選取?選一個(gè)常量顯然是不合適的,因?yàn)?loss 和梯度的數(shù)值在變,scale factor 需要跟隨 loss 動(dòng)態(tài)變化。健康的 loss 是振蕩中下降,因此GradScaler設(shè)計(jì)的 scale factor 每隔??個(gè) iteration 乘一個(gè)大于 1 的系數(shù),再 scale loss;并且每次更新前檢查溢出問題(檢查梯度中有沒有infnan),如果有,scale factor 乘一個(gè)小于 1 的系數(shù)并跳過該 iteration 的參數(shù)更新環(huán)節(jié),如果沒有,就正常更新參數(shù)。動(dòng)態(tài)更新 scale factor 是 amp 實(shí)際操作中的流程??偨Y(jié) amp 動(dòng)態(tài) scale factor 的訓(xùn)練流程:

  1. 維護(hù)一個(gè) FP32 數(shù)值精度模型的副本

  2. 初始化?s

  3. 在每個(gè) iteration + a 拷貝并且轉(zhuǎn)換成FP16模型 + b 前向傳播(FP16 的模型參數(shù)) + c loss 乘 scale factor?s?+ d 反向傳播(FP16 的模型參數(shù)和參數(shù)梯度) + e 檢查有沒有inf或者nan的參數(shù)梯度 + 如果有:降低?s,回到步驟a + f 參數(shù)梯度乘?1/s?+ g 利用 FP16 的梯度更新 FP32 的模型參數(shù)

2. amp模塊的API

用戶使用混合精度訓(xùn)練基本操作:

# amp依賴Tensor core架構(gòu),所以model參數(shù)必須是cuda tensor類型
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)
# GradScaler對(duì)象用來自動(dòng)做梯度縮放
scaler = GradScaler()

for epoch in epochs:
for input, target in data:
optimizer.zero_grad()
# 在autocast enable 區(qū)域運(yùn)行forward
with autocast():
# model做一個(gè)FP16的副本,forward
output = model(input)
loss = loss_fn(output, target)
# 用scaler,scale loss(FP16),backward得到scaled的梯度(FP16)
scaler.scale(loss).backward()
# scaler 更新參數(shù),會(huì)先自動(dòng)unscale梯度
# 如果有nan或inf,自動(dòng)跳過
scaler.step(optimizer)
# scaler factor更新
scaler.update()

2.1 autocast類

autocast(enable=True)`` 可以作為上下文管理器和裝飾器來使用,給算子自動(dòng)安排按照 FP16 或者 FP32 的數(shù)值精度來操作。

2.1.1 autocast算子

PyTorch中,只有 CUDA 算子有資格被 autocast,而且只有 “out-of-place” 才可以被 autocast,例如:a.addmm(b, c)是可以被 autocast,但是a.addmm_(b, c)a.addmm(b, c, out=d)不可以 autocast。amp autocast 成 FP16 的算子有:

autocast 成 FP32 的算子:

剩下沒有列出的算子,像dot,add,cat...都是按數(shù)據(jù)中較大的數(shù)值精度,進(jìn)行操作,即有 FP32 參與計(jì)算,就按 FP32,全是 FP16 參與計(jì)算,就是 FP16。

2.1.2 MisMatch error

作為上下文管理器使用時(shí),混合精度計(jì)算 enable 區(qū)域得到的 FP16 數(shù)值精度的變量在 enable 區(qū)域外需要顯式的轉(zhuǎn)成 FP32:

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")

with autocast():
# torch.mm is on autocast's list of ops that should run in float16.
e_float16 = torch.mm(a_float32, b_float32)
# Also handles mixed input types
f_float16 = torch.mm(d_float32, e_float16)

# After exiting autocast, calls f_float16.float() to use with d_float32
g_float32 = torch.mm(d_float32, f_float16.float())

2.1.3 autocast 嵌套使用

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")

with autocast():
e_float16 = torch.mm(a_float32, b_float32)

with autocast(enabled=False):

f_float32 = torch.mm(c_float32, e_float16.float())

g_float16 = torch.mm(d_float32, f_float32)

2.1.4 autocast 作為裝飾器

這種情況一般用于 data parallel 的模型的,autocast 設(shè)計(jì)為 “thread local” 的,所以只在 main thread 上設(shè) autocast 區(qū)域是不 work 的:

model = MyModel() 
dp_model = nn.DataParallel(model)

with autocast(): # dp_model's internal threads won't autocast.
#The main thread's autocast state has no effect.
output = dp_model(input) # loss_fn still autocasts, but it's too late...
loss = loss_fn(output)

正確姿勢是對(duì) forward 裝飾:

MyModel(nn.Module):
...
@autocast()
def forward(self, input):
...

另一個(gè)正確姿勢是在 forward 的里面設(shè) autocast 區(qū)域:

MyModel(nn.Module):
...
def forward(self, input):
with autocast():
...

forward 函數(shù)處理之后,在 main thread 里 autocast

model = MyModel()
dp_model = nn.DataParallel(model)

with autocast():
output = dp_model(input)
loss = loss_fn(output)

2.1.5 autocast 自定義函數(shù)

對(duì)于用戶自定義的 autograd 函數(shù),需要用amp.custom_fwd裝飾 forward 函數(shù),amp.custom_bwd裝飾 backward 函數(shù):

class MyMM(torch.autograd.Function):
@staticmethod
@custom_fwd
def forward(ctx, a, b):
ctx.save_for_backward(a, b)
return a.mm(b)
@staticmethod
@custom_bwd
def backward(ctx, grad):
a, b = ctx.saved_tensors
return grad.mm(b.t()), a.t().mm(grad)

調(diào)用時(shí)再 autocast

mymm = MyMM.apply

with autocast():
output = mymm(input1, input2)

2.1.6 源碼分析

autocast主要實(shí)現(xiàn)接口有:

A.?__enter__

def __enter__(self):
self.prev = torch.is_autocast_enabled()
torch.set_autocast_enabled(self._enabled)
torch.autocast_increment_nesting()

B.?__exit__

def __exit__(self, *args):

if torch.autocast_decrement_nesting() == 0:
torch.clear_autocast_cache()
torch.set_autocast_enabled(self.prev)
return False

C.?__call__

def __call__(self, func):
@functools.wraps(func)
def decorate_autocast(*args, **kwargs):
with self:
return func(*args, **kwargs)
return decorate_autocast

其中torch.*autocast*函數(shù)是在 pytorch/aten/src/ATen/autocast_mode.cpp 里實(shí)現(xiàn)。PyTorch ATen 是 A TENsor library for C++11,ATen 部分有大量的代碼是來聲明和定義 Tensor 運(yùn)算相關(guān)的邏輯的。autocast_mode.cpp?實(shí)現(xiàn)策略是 “ cache fp16 casts of fp32 model weights”。

2.2 GradScaler 類

torch.cuda.amp.GradScaler(init_scale=65536.0, growth_factor=2.0, backoff_factor=0.5, growth_interval=2000, enabled=True)用于動(dòng)態(tài) scale 梯度

+.?init_scale: scale factor 的初始值 +.?growth_factor: 每次 scale factor 的增長系數(shù) +.?backoff_factor: scale factor 下降系數(shù) +.?growth_interval: 每隔多個(gè) interval 增長 scale factor +.?enabled: 是否做 scale

2.2.1?scale(output)方法

對(duì)outputs乘 scale factor,并返回,如果enabled=False就原樣返回。

2.2.3?step(optimizer, *args, **kwargs)方法

step?方法在做兩件事情:

  • 對(duì)梯度 unscale,如果之前沒有手動(dòng)調(diào)用unscale方法的話

  • 檢查梯度溢出,如果沒有nan/inf,就執(zhí)行 optimizer 的 step,如果有就跳過

注意:GradScaler的step不支持傳 closure。

2.2.4?update(new_scale=None)方法

update方法在每個(gè) iteration 結(jié)束前都需要調(diào)用,如果參數(shù)更新跳過,會(huì)給 scale factor 乘backoff_factor,或者到了該增長的 iteration,就給 scale factor 乘growth_factor。也可以用new_scale直接更新 scale factor。

2.3 舉例

2.3.1 Gradient clipping

scaler = GradScaler()

for epoch in epochs:
for input, target in data:
optimizer.zero_grad()
with autocast():
output = model(input)
loss = loss_fn(output, target)
scaler.scale(loss).backward()

# unscale 梯度,可以不影響clip的threshold
scaler.unscale_(optimizer)

# clip梯度
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm)

# unscale_()已經(jīng)被顯式調(diào)用了,scaler正常執(zhí)行step更新參數(shù),有nan/inf也會(huì)跳過
scaler.step(optimizer)
scaler.update()

2.3.2 Gradient accumulation

scaler = GradScaler()

for epoch in epochs:
for i, (input, target) in enumerate(data):
with autocast():
output = model(input)
loss = loss_fn(output, target)
# loss 根據(jù) 累加的次數(shù)歸一一下
loss = loss / iters_to_accumulate

# scale 歸一的loss 并backward
scaler.scale(loss).backward()

if (i + 1) % iters_to_accumulate == 0:
# may unscale_ here if desired
# (e.g., to allow clipping unscaled gradients)

# step() and update() proceed as usual.
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()

2.3.3. Gradient penalty

scaler = GradScaler()

for epoch in epochs:
for input, target in data:
optimizer.zero_grad()
with autocast():
output = model(input)
loss = loss_fn(output, target)
# 防止溢出,在不是autocast 區(qū)域,先用scaled loss 得到 scaled 梯度
scaled_grad_params = torch.autograd.grad(outputs=scaler.scale(loss),
inputs=model.parameters(),
create_graph=True)
# 梯度unscale
inv_scale = 1./scaler.get_scale()
grad_params = [p * inv_scale for p in scaled_grad_params]
# 在autocast 區(qū)域,loss 加上梯度懲罰項(xiàng)
with autocast():
grad_norm = 0
for grad in grad_params:
grad_norm += grad.pow(2).sum()
grad_norm = grad_norm.sqrt()
loss = loss + grad_norm

scaler.scale(loss).backward()

# may unscale_ here if desired
# (e.g., to allow clipping unscaled gradients)

# step() and update() proceed as usual.
scaler.step(optimizer)
scaler.update()

2.3.4. Multiple models

scaler 一個(gè)就夠,但 scale(loss) 和 step(optimizer) 要分別執(zhí)行

scaler = torch.cuda.amp.GradScaler()

for epoch in epochs:
for input, target in data:
optimizer0.zero_grad()
optimizer1.zero_grad()
with autocast():
output0 = model0(input)
output1 = model1(input)
loss0 = loss_fn(2 * output0 + 3 * output1, target)
loss1 = loss_fn(3 * output0 - 5 * output1, target)

# (retain_graph here is unrelated to amp, it's present because in this
# example, both backward() calls share some sections of graph.)
scaler.scale(loss0).backward(retain_graph=True)
scaler.scale(loss1).backward()

# You can choose which optimizers receive explicit unscaling, if you
# want to inspect or modify the gradients of the params they own.
scaler.unscale_(optimizer0)

scaler.step(optimizer0)
scaler.step(optimizer1)

scaler.update()

2.3.5. Multiple GPUs

torch DDP 和 torch DP model 的處理方式一樣

Q1. amp 是如何做到 FP16 和 FP32 混合使用,“還不掉點(diǎn)”

模型量化、模型壓縮的算法挺多的,但都做不 amp 這樣,對(duì)多數(shù)模型訓(xùn)練不掉點(diǎn)(但是實(shí)操中,聽有經(jīng)驗(yàn)的大神介紹,完全不到點(diǎn)還是有點(diǎn)難度的)。amp 能做成這樣,因?yàn)樗鼘?duì)模型沒有壓縮和量化,維護(hù)的還是一個(gè) 32 位的模型。只是用 16 位去表示原來 32 位的梯度:通常模型訓(xùn)練依賴 FP32 的精度,因?yàn)樘荻葧?huì)有一部分 FP16 表示不了,而 scale factor 把梯度 shift 到 FP16 能表示范圍,使得梯度方面精度的損失較小,可能 forward 時(shí)候的直接的精度壓縮是訓(xùn)練最大的損失。

Q2. 沒有 Tensor Core 架構(gòu)能否使用 amp

沒有 Tensor Core 架構(gòu)的 GPU 試用 amp,速度反而下降,但顯存會(huì)明顯減少。作者在 Turing 架構(gòu)的 GTX 1660 上試用 amp,運(yùn)算時(shí)間增加了一倍,但顯存不到原來的一半。

Q3. 為什么 amp 中有兩份參數(shù),存儲(chǔ)消耗反而更小

相比與模型參數(shù),對(duì)中間層結(jié)果的存儲(chǔ)更是 deep learning 的 bottleneck。當(dāng)對(duì)中間結(jié)果的存儲(chǔ)砍半,整個(gè)存儲(chǔ)消耗就基本上原來的一半。


·················END·················




推薦閱讀

谷歌提出Meta Pseudo Labels,刷新ImageNet上的SOTA!

PyTorch 源碼解讀之 torch.autograd

漲點(diǎn)神器FixRes:兩次超越ImageNet數(shù)據(jù)集上的SOTA

Transformer為何能闖入CV界秒殺CNN?

SWA:讓你的目標(biāo)檢測模型無痛漲點(diǎn)1% AP

CondInst:性能和速度均超越Mask RCNN的實(shí)例分割模型

centerX: 用新的視角的方式打開CenterNet

mmdetection最小復(fù)刻版(十一):概率Anchor分配機(jī)制PAA深入分析

MMDetection新版本V2.7發(fā)布,支持DETR,還有YOLOV4在路上!

CNN:我不是你想的那樣

TF Object Detection 終于支持TF2了!

無需tricks,知識(shí)蒸餾提升ResNet50在ImageNet上準(zhǔn)確度至80%+

不妨試試MoCo,來替換ImageNet上pretrain模型!

重磅!一文深入深度學(xué)習(xí)模型壓縮和加速

從源碼學(xué)習(xí)Transformer!

mmdetection最小復(fù)刻版(七):anchor-base和anchor-free差異分析

mmdetection最小復(fù)刻版(四):獨(dú)家yolo轉(zhuǎn)化內(nèi)幕


機(jī)器學(xué)習(xí)算法工程師


? ??? ? ? ? ? ? ? ? ? ? ? ??????? ??一個(gè)用心的公眾號(hào)


?

瀏覽 200
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美国产日韩在线观看| 日韩性爱在线| 国产性爱网址| 99热精品国产| 国产亚洲精品午夜福利巨大软件| 91天天综合在线| 69精品视频| 欧美日韩高清无码| 日韩视频――中文字幕| 翔田千里无码AV在线观看| 久久国产精品在线| 玩弄大乳乳妾高潮乳喷视频| 九色91视频| 成人三级片免费| 西西人体44www大胆无码| 香蕉中文在线| 无码电影视频| 久久久久久国际四虎免费精品视频 | 在线播放你懂的| 色五月网| 中文字幕一区在线| 七十路の高齢熟女千代子下载| 国产精品高清网站| av三级片在线播放| www.黄色| 玖玖在线| 五月天性爱| 俺去俺来也www色官网cms| 毛片在线免费| 午夜天堂在线| 成年人AV| 欧美理伦| 日本A片一级| 免费亚洲视频| 中文字幕日韩欧美| 国产精品成人无码| 91丨九色丨老农村| 久久成人国产| 国产午夜激情视频| 精品人妻一区二区免费蜜桃| 在线三级av| 一区二区精品视频| 中文字幕黑人无码| 日韩操B| 夜夜操夜夜爽| 精品九九九九| 久操福利| av资源免费| 欧美成人性爱图片| 7799综合| 翔田千里无码A片| 亚洲色啪| 蜜桃黄色视频| 十八禁福利网站| 日韩性AV| 亚洲色逼图片| 北条麻妃无码在线| 国产日韩欧美在线观看| 免费看无码一级A片放24小时| 国产黄A片免费网站免费| 日批免费视频| 黄色国产免费| 中文字幕成人无码| 北条麻妃精品在线| 超碰在线天天| 国产aaaa| 被黑人操| 玖玖色视频| 中文字幕一级片| 777性爱| 午夜成人福利视频| 激情淫荡少妇| 蜜桔视频嫩草蜜桃| 日本一级做a爱片| 亚洲色图15P| 在线大香蕉| 亚洲精品视频无码| 色日韩| 色色毛片| 国产成人大片| 久久99嫩草熟妇人妻蜜臀| 久久免费视频1| 亚洲福利视频网站| 亚洲成人在线无码| 东方av在线免费观看| 国产一级片免费| 免费无码婬片aaaa| 免费一区视频| 久久精彩免费视频| 天天日天天草天天干| 欧美插插| 精品国产AV无码一区二区三区 | 裸体黄色一极大片| 小早川怜子精品一区二区| 日本伊人网| 久久6热| 欧美大香蕉伊人网| www99国产| 激情小说亚洲图片:伦| 亚洲福利影院| 亚洲蜜桃av一区| 黄频美女日本免费| 操极品美女| 欧美熟女性爱| 二区三区不卡| 美女在线扣穴| 久久青草影院| 色五月天导航| 五月天婷婷小说| 日韩av成人| 国内精品人妻无码久久久影院蜜桃| 国产精品视频久久久久| 久热中文在线观看精品视频 | 人人摸人人干人人操| 伊人五月天激情| 好吊看视频| 午夜成人av| 亚洲AV第二区国产精品| 色五月丁香婷婷| 精品三区| 91水蜜桃| 久久视频理论| 天天精品无码| 无码视频免费播放| 国产3p露脸普通话对白| 九一成人网| 91插插插插| 亚洲三级无码在线| 亚洲社区在线观看| 亚洲欧美卡通| 日本一区二区三区免费观看| 国产一级婬片A片AAA樱花| 日本一区二区视频| 日韩精品一二三区| EEUSS| 成人免费三级片| 北条麻妃在线无码| 91性爱视频| 正在播放吴梦梦淫行| 中文字幕黑人无码| 久草a视频| 亚洲视频在线免费| 欧美日韩在线观看一区| 中文字幕高清视频| 中文字幕免费无码| 操综合网| 在线黄片视频| 人人操人人爽| 免费的黄色片| 91爱爱·com| 国产色呦呦| 欧美强开小嫩苞| 欧美乱伦视频| 亚洲无码一卡| 五月丁香六月激情综合| 牛牛免费视频| 黄片入口| 最新中文字幕观看| 亚洲AV女人18毛片水真多| 亚洲免费视频网| 日本爱爱视频免费| 一级片免费观看| 蜜桃高清无码| 亚洲无码中| 美女福利在线| 欧美手机在线视频| www.国产豆花精品区| 日本天堂网站| A天堂视频| 日韩AV免费在线| 爽好紧别夹喷水欧美| 精品国产成人| 91中文字幕网| 99精品视频免费看| 天天综合久久| 中国无码| www.亚洲视频| 国产色视频在线| 国产免费一区二区三区| 成人黄色在线观看视频| 日本AA片视频| 亚洲加勒比在线| 97超碰人人| 国产精品无码乱伦| 俺也来www俺也色com| 九九热超碰| 在线观看视频一区| 日本一区二区三区四区在线观看| 精品永久免费| 内射国产| 五月天婷婷在线无码| 全国男人的天堂网站| 26uuu亚洲| 38t6电影网logo高清图片| 日韩视频播放在线综合| 屁屁影院CCYYCOM发布地| 亚洲美女操| 狠狠操在线视频| 国产精品麻豆视频| 色欲AV网站| 亚洲青青草| 91自摸| 996精品视频| 视频一区18| 亚洲人妻AV| 能看的黄色视频| 日韩免费三级| av无码中文字幕| 午夜亚洲国产一区视频网站| 嫩BBB搡BBB搡BBB四川| 69国产精品成人无码视频色| 久久综合九九| 亚洲欧美日韩不卡| 特黄特色大片BBBB| 伊人导航| 婬乱欧美一二三区| 97人人澡| 91人妻人人爽人人爽| 国产精品9999久久久久仙踪林| 风间由美大荫蒂无码AV| 久操操| 亚洲欧美日韩黑料吃瓜在线观看| 亚洲中文免费观看| 青娱乐伊人| 一级免费毛片| 懂色AV无码中字幕一区| 罗莉AV| 国产精品一二三| 久操国产视频| caopor在线| 大a片| 欧美亚洲操逼视频| 粉嫩av懂色av蜜臀av分享| 亚洲成人视频| 成人三级片网| 国产一区二区三区无码| 91黄色毛片| 精品码A片18| 日本黄网站| 日韩无码91| 高潮免费视频| 欧美性爱自拍| 蜜桃黄色视频| 一道本一区二区三区| 亚洲成人毛片| 亚洲A片免费看| 黄色电影A| 在线大香蕉| 日本色中文字幕| 欧美黄色成人网站| 日韩在线观看免费| 操美女久久| 中文字幕-区二区三区四区视频中国| 亚洲性夜夜天天天天天天| 成熟的国模冰莲[2]| 欧美强开小嫩苞| 免费无码成人| 豆花天天吃最新视频| 夜夜操夜夜操| 欧美日韩成人网站| 国产黄色精品视频| 免费看黃色AAAAAA片| 色人阁人妻中文字幕| 久久嫩草| 狠狠干大香蕉| 大香蕉日| 中文字幕第2页| 蜜桃AV一区二区三区| 色欲影视插综合一区二区三区| 日韩日批| 免费一级黄| 青草视频精品| 国产动态图| 成人综合网站| 先锋影音av在线| 亚洲精品无码永久| 亚洲A片免费看| 亚洲色成人网站www永久四虎| 欧美国产综合在线| 中文字幕一区二区6页| 国产精品久久久久久久久久两年半 | 欧美撒色逼撒| 91久久午夜无码鲁丝片久久人妻 | 午夜成人福利视频在线观看 | 三级成人视频| 中文字幕在线观看AV| a三级片| 精品人妻一区二区三区在线视频不卡| 黄色精品视频| 香蕉中文在线| 中文日韩字幕| 男女高清无码| 猫咪AV大香蕉| 九色PORNY国产成人蝌蚪| 东京热日韩无码| 国产精品视频福利| 欧美久草蜜桃视频| 久久久久久久久久成人永久免费视频 | 少妇喷水视频| 欧美操比视频| 成人做爰100片免费视频| 夜夜爽天天爽| 中文字幕永久在线视频v1.0| 91成人在线播放| 8050午夜| 欧美操逼大片| 日本一区二区在线| 东北奇淫老老妇| 色五月网| 欧美成人五月天| 综合AV| 97色色得| 西西444WWW无码大胆知乎| 欧美成人综合| 国产一级AV免费观看| 老熟女乱伦| 国产精品免费一区二区三区四区视频| 加勒比精品在线| JlZZJLZZJlZZ亚洲女人17| www.97超碰| 欧美日韩中国操逼打炮| 国产在线高清| 免费看成人747474九号视频在线观看 | 午夜3D动漫AV| 日韩一级片免费| 麻豆乱伦| 久久人人操人人| 亚洲色诱| 欧美熟妇高潮流白浆| 亚洲精品国产精品国自产在线| 亚洲日本中文字幕在线观看| 国产一级a毛一级a做免费高清视频 | 在线日韩AV| 懂色中国闺密偷情懂色AV | 韩国无码专区| 五月天黄色电影网站| 欧美一级A片免费看| 欧美理伦| 国产区AV| 黄色a片在线观看| 亚洲国产婷婷香蕉A片| 色久悠悠综合网| 色色大香蕉| 亚洲欧美精品AAAAAA片| 免费色网站| 国产无遮挡又黄又爽在线观看| 婷婷深爱五月| 4080yy午夜理论片成人| 91久久精品一区二区三| 国产人成视频免费观看| 特級西西444WWw高清大膽| 二区三区不卡| 久久AV秘一区二区三区水生| 色99在线视频| 91精品国产麻豆国产自产在线| 欧美激情xxx| 久久精品国产99精品国产亚洲性色 | 亚洲日韩欧美在线观看| 亚洲国产操逼| 无码影音| 性欧美XXXX| 日本a片在线观看| 西西午夜视频| 婷婷五月在线观看| 免费看污网站| 三级片中文字幕| 欧美精品A片| 99这里只有精品| 秘亚洲国产精品成人网站| 五月婷婷色| 俺去啦俺来也| 人妻少妇被猛烈进入中文字幕| 婷婷国产AV| 青青草国产在线视频| 夜色福利视频| 嫩草国产在线| av在线精品| 国产a精品| 精品九九| 在线观看av网站| 体内射精免费视频| 51av在线| 久久99视频免费观看| 亚洲毛片在线观看| 操美女久久| 91在线看| 高清无码网址| 黄色插逼视频| 久久精品国产99精品国产亚洲性色 | 亚洲欧洲精品在线| 日本在线不卡视频| 黄片AAA| 婷婷五月天色播| 中文字幕++中文字幕明步| www.97超碰| www日本色| 狠狠干大香蕉| 成人H在线| 岛国AV在线| 激情视频免费在线观看| 欧美在线观看视频一区| 日韩高清中文字幕| 免费电影日本黄色| 青青草AV| 青榴社区| 国产精品九九视频| 蜜桃av秘无码一区二区| 亚洲AV成人无码精品区| 午夜av免费在线| av资源免费观看| 黄色大片免费网站| 亚洲特黄| 影音先锋麻豆| 91丨豆花丨国产极品| 亚洲综合免费观看高清| 久久在线| 亚洲猛男操逼欧美国产视频 | 久久黄色网| 成人性爱在线播放| 精品国产成人| 91.xxxxx| chinese搡老熟老妇人| 日韩欧美综合一区| 免费视频二区| 日韩欧美人妻无码精品| 国产AV资源| 91在线无码精品秘入口国战| 久久久老熟女一区二区三区91| 午夜国产在线| 天天超碰| 91视频免费在线看| 欧美视频在线播放| 围内精品久久久久久久久久‘变脸| 操比免费视频| 热99| 亚洲成人AV电影| 中文字幕无码一区二区| av不卡在线| 成人做爰黄A片免费看| 五月激情婷婷基地| 大鸡吧在线视频| 自拍偷拍激情视频| 成人三级电影网| 无码免费视频在线观看| 亚洲AV无码国产精品久久不卡 | 一级a片在线播放| 91人妻视频| 欧美综合精品| 色色网站在线观看| 妓女不卡| 97人人爽人人爽人人人| 天天舔天天干| 中文字幕线观看| 少妇搡BBBB搡BBB搡澳门| 少妇婷婷| 二区三区在线观看| 色欲狠狠躁天天躁无码中文字幕| 操少妇逼| 人妻丰满精品一区二区| 日韩东京热中文字幕| 日本特级黄A片免费观看| 无码一区二区黑人猛烈视频网站 | 高清无码1区| 美女黄色视频网站| 日韩中文字幕在线人成网站| 校园春色成人| 婷婷三区| 亚洲va欧洲va国产va不卡| 在线操逼视频| 天堂亚洲AV无码精品成人| 欧美囗交荫蒂AAAA| 就要干就要操| 亚洲人做受| 成人自拍偷拍视频| 一级一级一级做a免费一级做a| 啪啪免费| 女BBBBBB女BBB| 在线视频一区二区三区| 日韩成人观看| 欧美精品一级| 欧美日韩午夜福利视频| 欧美日韩一级视频| 天天干天天干天| 亚洲视频在线免费| 日韩免费一级| 俺去也在线播放| 国产曰韩欧美综合另类在线| 九色PORNY9l原创自拍| 天天天天天天天操| 麻豆91精品91久久久停运原因| 日韩十八禁| 99久久99久久精品免费看小说。| 亚洲美女视频网| 亚洲成人在线视频| 日韩免费在线播放| 波多野结衣在线观看一区二区| 日韩高清无码免费看| 欧美色图15P| 最新中文字幕在线观看视频| 亚洲欧美日本在线| 国产日逼视频| 国产一级片在线播放| 成人毛片18女人毛片真水| 欧美在线看片| 蜜桃AV| 午夜成人无码| 大香蕉午夜视频| 国产精品一级无码免费播放| 天天干天天操天天射| 一区二区水蜜桃| 日韩一区二区三区无码电影| 午夜午夜福利理论片在线播放| 男女内射视频| 五月天AV在线| 久久激情av| 国产精品91久久久| 免费无码在线观看| 成人亚洲A片V一区二区三区蜜月| 三级A片视频| 天天夜夜爽| 日韩加勒比| 韩日无码视频| 三级无码片| aV无码av天天aV天天爽第一| 四川美女网久草| 黄色av免费在线观看| 中文字幕av第一页| 国精产品一区一区三区有限公司杨| 人妻少妇91精品一区黑人| 操B视频网站| 欧美成人视屏| 色图15p| 亚洲免费观看A∨中文| 性爱无码视频| av无码中文字幕| 国产成人AV在线观看| www在线视频| 婷婷手机在线| 日韩日逼视频| 靠逼免费视频| 亚洲V无码| 免费无码国产在线| 午夜午夜福利理论片在线播放| 五月激情视频| 插菊花综合网3| 无码免费毛片一区二区三区古代| 双腿张开被9个男人调教| 狼人伊人综合| 国产精品视频免费| 337p大胆色噜噜噜噜噜| 青青草成人电影| 亚洲色图欧美| 中文字幕66页| 亚洲日韩在线视频| 日韩在线不卡视频| 日本少妇BBW| 亚洲A片电影| 国产91在线拍揄自揄拍无码九色 | 成人免费毛片蓝莓| 日本AA片视频| 97播播| 午夜成人黄色| 空姐白洁| 色婷婷综合在线| 男女啪啪网| 欧美日韩亚洲视频| 国产在线97| 五月丁香亚洲综合| 国产日韩性爱视频| 欧美一级片在线观看| 欧美亚洲性爱| 国产色呦呦| 特级西西人体444www高清大胆 | 四色永久成人网站| 国产成人精品免费看视频| 日韩porn| 91美女在线观看| 北条麻妃一区二区三区-免费免费高清观看 | 亚洲在线大香蕉| 日韩AV中文字幕在线播放| 国产日韩91| 操你啦青青草| 91在线视频| 婷婷国产亚洲精品网站| 爱爱黄色视频| 中文字幕永久在线观看| 亚洲黄色电影网| 国产无码观看| 一本色道久久综合亚洲怎么玩| 久久久久三级| 褒姒AV无玛| 黃色一级一片免费播放| 亚洲精品内射| 综合色区| 操少妇逼| 一级黄色免费看| 天天日人人| av一区二区在线观看| 日本人妻在线播放| 东京热六区| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 久久一二三四| 亚洲另类图片小说| 久久免费看| 黄色免费毛片| 天天干天天上| 成人播放视频| 日本精品一区二区| 蜜柚AV| 日韩A片无码ⅩXXXX| 婷婷五月天成人电影| 中文字幕在线国产| 中文字幕成人在线观看| 欧洲AV在线| 国产成人777777精品综合| 人妻中文字幕av| 91.射| 日韩电影免费在线观看| brazzers疯狂作爱| 日韩精品成人专区无码| 久久99精品国产| 中文字幕在线免费视频| 欧美一级一级| 人妻少妇一区二区三区| 操日本逼| 久草中文网| va在线| 亚洲熟妇视频| 黄片51| 日韩无码中文字幕视频| 特级西西人体444www高清大胆| 亚洲理论| 韩国无码视频在线观看| 久久亚洲一区| 老司机午夜免费精品视频| 天天干狠狠| AA免费视频| 毛片黄片| 欧美第一网站| 日P免费视频| 亚欧成人在线视频| 国产成人综合自拍| 国产在线不卡年轻点的| 亚洲中文字幕在线观看| 国产xxxxx| 九九九国产| 欧美精产国品一二三区| 8050网午夜| 天天射日日干| 亚洲无码视频播放| 国产高清无码免费| 成人香蕉网| 亚洲综合免费观看| 国产怡红院| 日皮视频免费观看| 国产资源av| 操人人| 欧美激情网址| 久久99热这里只频精品6学生| 性久久久久久| 日本精品二区| 中文字幕第83页| 婷婷丁香激情五月天| 亚洲的天堂的αⅴ| 大香蕉久操| 久久五月婷| 精品视频在线免费观看| 91人妻无码一区二区三区| 在线看a片| 在线观看黄色视频网站| 欧美日韩中文字幕在线观看| 欧美在线a| 丁香五月网| 午夜婷婷| 久久久久99精品成人片欧美一区| 国产高清自拍| 亚洲男人天堂| 久久视频理论| 国产一级a毛一级a毛片视频黑人| 999精品视频在线| 先锋影音资源站av每日资源在线 | 国产精品久久久久久久9999| 国产成人精品一区二区三区视频| 麻豆精品秘国产| 国产黄色小视频在线观看| 免费二区| 亚洲a片在线观看| 久久精品夜色噜噜亚洲A∨ | 久久黄色小视频| 日本国产在线观看| 高清无码在线不卡| 国产成人无码免费看片| 丁香五月婷婷综合| 国产福利91精品| 亚洲一级Av无码毛片久久精品| 麻豆精品| 操逼的视频| 日逼99| 亚洲高清视屏| 北条麻妃九九九精品视频免费观看| 国产在线接入| 99在线精品观看| 国产久久久久久久久久| 色五月婷婷久久| 国产无码黄片| 91久久精品一区二区三| 无码成人A片在线观看| 中文无码在线视频| 日韩福利在线观看| 国产精品揄拍一区二区| 欧美99| 国产一级精品视频| 成人精品永久免费视频99久久精品 | 亚洲第一色| 欧美黄色片网站| 中文有码在线观看| 性爱福利视频| 天天操天天干天天射| 国产女人在线观看| 人人色人人摸| 亚洲一区二区黄色电影视频网站| 91在线无码精品秘网站| 黄色a片在线观看| 欧美一级A片在免费看| 亚洲第一成人网址| 自拍偷拍| 99久在线精品99re8| 亚洲视频中文字幕在线观看| 婷婷精品国产a久久综合| 伊人大香蕉综合| 91超碰在线| 丁香婷婷五月综合影院| 亚洲视频在线免费| 亚洲AV图片| 毛片网站免费| 一区二区三区视频在线| 亚洲第一AV| 五月激情综合网| 青娱AV| 亚洲北条麻妃一级A片| 成人网站一区二区| 亚洲男同Gay一区二区| 亚洲AV无码精品久久一区二区| 欧美黄片免费在线观看| 丁香六月天| 国内特级毛片| 欧美日韩有码视频网址大全| 大香蕉在线99| 精品素人在线| 亚洲无码图| 中文字幕777| 亚洲一级内射| 在线观看A片| 日韩va亚洲va欧美va高清| 高清无码内射视频| 人人人人人人人人操| 激情五月婷婷丁香| 亚洲无码AV一区二区三区| 五月天婷婷视频| 大香蕉现在视频中心一| 小早川怜子精品一区二区| 你懂的在线免费观看| 一插菊花综合| 色天天综合| 中文字幕日韩有码| 日韩三级| 国产精品一级A片| 国产小视频在线免费观看| 在线观看免费黄色| 黄色AV免费看| 爱爱动态图| 九九久久国产精品| 波多野结衣AV网站| 国产videos| 日本中文字幕在线播放| 久久97| 免费岛国av大片| 精品乱子伦一区二区在线播放| 成人网中文字幕| 日韩成人小说| 久久久久三级片| 黄片免费视频| 亚洲成人情趣大香蕉| 100国产精品人妻无码| 超碰97在线免费| 啪啪网站免费| 久久大香蕉视频| 午夜精品18视频国产| 五月丁香六月激情综合| 亚洲无码一二区| 99视频在线播放| 美国一级A片草草视频| 五月黄片| 91蜜桃传媒在线观看| 国产精品tv| 伊人干综合| 成人毛片18毛片女人| 玖玖爱这里只有精品| 91蝌蚪在线观看| 性爱视频网站| 国产精品HongKong麻豆| 成人婷婷网| 五月婷婷色色色| 在线观看黄色AV| 国产无套进入免费| 97香蕉久久夜色精品国产| 高清无码不卡在线观看| 中文字幕在线观看网址最新地址| 国产1区| 中文字幕成人av| 麻豆传媒在线| 国产人人色| 亚洲免费观看高清| 欧美男人天堂网| 日韩中文字幕av在线| 99久在线精品99re8| 亚洲少妇视频| 亚洲色情在线播放| 国产白丝精品91爽爽久久| 婷婷五月影院| 日韩中文在线观看| 亚洲1234区| 特一级黄色视频| 免费的操逼视频| 久久精品美臀| 91丨PORN首页| 亚洲另类天堂| 国产无码高潮在线| 国产最新在线| 天天干,夜夜爽| 亚洲精品无码中文字幕| 高清无码毛片| 天天射天天干天天| 91丨九色丨国产在线| 日本少妇无码| 操逼三级视频| www.豆花社区成人| 亚洲视频免费在线播放| 高清无码在线看| 国产精品无码乱伦| 91超碰免费在线| 7777av| 玖玖爱资源站| 色婷婷老师| 日韩成人无码人妻| 亚洲中文视频| 一区二区三区四区无码在线| 一区二区三区无码高清| 欧美三P囗交做爰| 国产特级婬片免费看| 三级黄色视频在线观看| 怡红院男人天堂| 久久人妻无码| 麻豆精品国产传媒| 日韩人妻视频| 火淫玖玖免费精品| 大香蕉在线视频网| 国产黄色免费观看| 波多野结衣网站| 成人理论片| 在线观看99| 日韩无码专区| 丁香五月天激情视频| 日本中文字幕在线播放| 精品人妻一区二区三区在| 无码免费毛片| 精品四区| 亚洲成人在线| 波多野结衣操逼| 日本欧美视频| 亚洲人内射片又| 亚洲黄色Av| 艹逼视频网站| 欧美色一级| 一级电影视频去去去| 五月天激情影院| 西西人体大胆ww4444图片| 国产在线观看91| 激情一区二区三区| 黄色一级片免费在线观看| 麻豆影音先锋| 伊人大香蕉综合| 国产wwwww| 99re免费视频| 东京热免费视频| 色五月电影| ThePorn日本无码| 亚洲高清国产欧美综合s8| 黄色小说视频| AA片免费网站| 久热婷婷| 中国老女人性爱视频| AV在线免费播放| 欧美一区二区三区四| 国产欧美综合在线| 精品九九九| 影音先锋色AV| 91av免费观看| 欧美黄色操逼| 色五月在线观看|