精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

訓練提速60%!只需5行代碼,PyTorch 1.6即將原生支持自動混合精度訓練

新聞 人工智能
PyTorch 1.6 nightly增加了一個子模塊 amp,支持自動混合精度訓練。值得期待。即將在PyTorch 1.6上發布的 torch.cuda.amp 混合精度訓練模塊實現了它的承諾,只需增加幾行新代碼就可以提高大型模型訓練50-60% 的速度。

[[333418]]

PyTorch 1.6 nightly增加了一個子模塊 amp,支持自動混合精度訓練。值得期待。來看看性能如何,相比Nvidia Apex 有哪些優勢?

即將在 PyTorch 1.6上發布的 torch.cuda.amp 混合精度訓練模塊實現了它的承諾,只需增加幾行新代碼就可以提高大型模型訓練50-60% 的速度。

預計將在 PyTorch 1.6中推出的最令人興奮的附加功能之一是對自動混合精度訓練(automatic mixed-precision training)的支持。

混合精度訓練是一種通過在半精度浮點數 fp16上執行盡可能多的操作來大幅度減少神經網絡訓練時間的技術,fp16 取代了PyTorch默認的單精度浮點數 fp32。最新一代 NVIDIA GPU 搭載了專門為快速 fp16矩陣運算設計的特殊用途張量核(tensor cores)。

然而,到目前為止,這些張量核仍然很難用,因為它需要手動將精度降低的操作寫入模型中。這就是自動化混合精度訓練的用武之地。即將發布的 torc h.cuda.amp API 將允許你只用五行代碼就可以在訓練腳本中實現混合精度訓練!

混合精度是如何工作的

在我們理解混合精度訓練是如何工作的之前,首先需要回顧一下浮點數。

在計算機工程中,像1.0151或566132.8這樣的十進制數傳統上被表示為浮點數。由于我們可以有無限精確的數字(想象一下π) ,但存儲它們的空間是有限的,我們必須在精確度(在舍入數字前,我們可以在數字中包含的小數的數量)和大小(我們用來存儲數字的位數)之間做出妥協。

浮點數的技術標準 IEEE 754設定了以下標準:fp64, 又名雙精度或"double" ,最大舍入誤差 ~ 2^-52fp32, 又名單精度或"single",最大舍入誤差 ~ 2 ^-23fp16, 又名半精度或"half" ,最大舍入誤差 ~ 2 ^-10。

Python float 類型為 fp64,而對內存更敏感的PyTorch 使用 fp32作為默認的 dtype。

混合精度訓練的基本思想很簡單: 精度減半(fp32→ fp16) ,訓練時間減半。

最困難的是如何安全地做到這一點。

注意,浮點數越小,引起的舍入誤差就越大。對“足夠小“的浮點數執行的任何操作都會將該值四舍五入到零!這就是所謂的underflowing,這是一個問題,因為在反向傳播中很多甚至大多數梯度更新值都非常小,但不為零。在反向傳播中舍入誤差累積可以把這些數字變成0或者 nans; 這會導致不準確的梯度更新,影響你的網絡收斂。

2018年ICLR論文 Mixed Precision Training 發現,簡單的在每個地方使用 fp16 會“吞掉”梯度更新小于2^-24的值——大約占他們的示例網絡所有梯度更新的5% :

混合精度訓練是一套技術,它允許你使用 fp16,而不會導致你的模型訓練發生發散。這是三種不同技術的結合。

第一,維護兩個權重矩陣的副本,一個“主副本”用 fp32,一個半精度副本用 fp16。梯度更新使用 fp16矩陣計算,但更新于 fp32矩陣。這使得應用梯度更新更加安全。

第二,不同的向量操作以不同的速度累積誤差,因此要區別對待它們。有些操作在 fp16中總是安全的,而其它操作只在 fp32中是可靠的。與其用 fp16跑整個神經網絡,不如一些用半精度另外的用單精度。這種 dtypes 的混合就是為什么這種技術被稱為“混合精度”。

第三,使用損失縮放。損失縮放是指在執行反向傳播之前,將損失函數的輸出乘以某個標量數(論文建議從8開始)。乘性增加的損失值產生乘性增加的梯度更新值,“提升”許多梯度更新值到超過fp16的安全閾值2^-24。只要確保在應用梯度更新之前撤消縮放,并且不要選擇一個太大的縮放以至于產生 inf 權重更新(overflowing) ,從而導致網絡向相反的方向發散。

將這三種技術結合在一起,作者可以在顯著加速的時間內訓練好多種網絡以達到收斂。至于benchmarks,我建議讀一讀這篇只有9頁的論文!

張量核(tensor cores)是如何工作的

雖然混合精度訓練節省內存(fp16矩陣只有 fp32矩陣的一半大小) ,但如果沒有特殊的 GPU 支持,它并不能加速模型訓練。芯片上需要有可以加速半精度操作的東西。在最近幾代 NVIDIA GPU中這東西叫: 張量核。

張量核是一種新型的處理單元,針對一個非常特殊的操作進行了優化: 將兩個4 × 4 fp16矩陣相乘,然后將結果加到第三個4 × 4 fp16或 fp32矩陣(一個“融合乘法加(fused multiply add)”)中。

更大的 fp16 矩陣乘法操作可以使用這個操作作為他們的基本構件來實現。由于大多數反向傳播都可以歸結為矩陣乘法,張量核適用于網絡中幾乎任何計算密集層。

陷阱: 輸入矩陣必須是 fp16。 如果你正在使用帶有張量核的 GPU 進行訓練,而沒有使用混合精度訓練,你不可能從你的顯卡中得到100% 的回報! 在 fp32中定義的標準 PyTorch 模型永遠不會將任何 fp16數學運算應用到芯片上,因此所有這些極其強悍的張量核都將處于空閑狀態。

張量核在2017年末在上一代Volta體系結構中被引入,當代Turing有了一些改進,并將在即將推出的Ampere中看到進一步的改進。云上通??捎玫膬煽頖PU 是 V100(5120個 CUDA 核,600個張量核)和 T4(2560個 CUDA 核,320個張量核)。

另一個值得記住的難題是firmware。盡管 CUDA 7.0或更高版本都支持張量核操作,但早期的實現據說有很多 bug,所以使用 CUDA 10.0或更高版本很重要。

Pytorch 自動混合精度是如何工作的

有了這些重要的背景知識,我們終于可以開始深入研究新的 PyTorch amp API 了。

混合精度訓練在技術上已經永遠成為可能: 手動運行部分網絡在 fp16中,并自己實現損失縮放。自動混合精度訓練中令人興奮的是“自動”部分。只需要學習幾個新的 API 基本類型: torch.cuda.amp.GradScalar 和 torch.cuda.amp.autocast。啟用混合精度訓練就像在你的訓練腳本中插入正確的位置一樣簡單!

為了演示,下面是使用混合精度訓練的網絡訓練循環的一段代碼。# NEW標記定位了增加了新代碼的地方。

  1. self.train() 
  2. X = torch.tensor(X, dtype=torch.float32) 
  3. y = torch.tensor(y, dtype=torch.float32) 
  4.  
  5.  
  6. optimizer = torch.optim.Adam(self.parameters(), lr=self.max_lr) 
  7. scheduler = torch.optim.lr_scheduler.OneCycleLR( 
  8.     optimizer, self.max_lr, 
  9.     cycle_momentum=False, 
  10.     epochs=self.n_epochs, 
  11.     steps_per_epoch=int(np.ceil(len(X) / self.batch_size)), 
  12. batches = torch.utils.data.DataLoader( 
  13.     torch.utils.data.TensorDataset(X, y), 
  14.     batch_size=self.batch_size, shuffle=True 
  15.  
  16.  
  17. # NEW 
  18. scaler = torch.cuda.amp.GradScaler() 
  19.  
  20.  
  21. for epoch in range(self.n_epochs): 
  22.     for i, (X_batch, y_batch) in enumerate(batches): 
  23.         X_batch = X_batch.cuda() 
  24.         y_batch = y_batch.cuda() 
  25.         optimizer.zero_grad() 
  26.  
  27.  
  28.         # NEW 
  29.         with torch.cuda.amp.autocast(): 
  30.             y_pred = model(X_batch).squeeze() 
  31.             loss = self.loss_fn(y_pred, y_batch) 
  32.  
  33.  
  34.         # NEW 
  35.         scaler.scale(loss).backward() 
  36.         lv = loss.detach().cpu().numpy() 
  37.         if i % 100 == 0
  38.             print(f"Epoch {epoch + 1}/{self.n_epochs}; Batch {i}; Loss {lv}"
  39.  
  40.  
  41.         # NEW 
  42.         scaler.step(optimizer) 
  43.         scaler.update() 
  44.  
  45.         scheduler.s 

新的 PyTorch GradScaler 對象是 PyTorch 實現的損失縮放?;叵胍幌略?ldquo;混合精度如何工作”一節中提到,在訓練期間,為了防止梯度變小到0,某種形式的縮放是必要的。最佳的損失乘數得足夠高以保留非常小的梯度,同時不能太高以至于導致非常大的梯度四舍五入到 inf產生相反的問題。

PyTorch使用指數退避(exponential backoff)來解決這個問題。Gradscalar 以一個小的損失乘數開始,這個乘數每次會翻倍。這種逐漸加倍的行為一直持續到 GradScalar 遇到包含 inf 值的梯度更新。Gradscalar 丟棄這批數據(例如跳過梯度更新) ,將損失乘數減半,并重置其倍增時間。

通過這種方式逐級上下移動損失乘數,PyTorch 可以隨著時間的推移近似得到合適的損失乘數。熟悉 TCP 擁塞控制的讀者應該會發現這里的核心思想非常熟悉!該算法使用的準確數字是可配置的,你可以直接從docstring中看到默認值:

  1. torch.cuda.amp.GradScaler( 
  2.     init_scale=65536.0, growth_factor=2.0, backoff_factor=0.5
  3.     growth_interval=2000, enabled=True 
  4. )  

Gradscalar 需要對梯度更新計算(檢查是否溢出)和優化器(將丟棄的batches轉換為 no-op)進行控制,以實現其操作。這就是為什么 loss.backwards()被 scaler.scale(loss).backwards()取代, 以及 optimizer.step()被 scaler.step(optimizer)替換的原因。

值得注意的是,GradScalar 可以檢測并停止overflows(因為 inf 總是壞的) ,但是它無法檢測和停止underflows(因為0通常是一個合法值)。如果你選擇的初始值太低,增長間隔太長,你的網絡可能會在 GradScalar 介入之前underflow并發散。由于這個原因,選擇一個非常大的初始值可能是一個好主意。

最后,注意 GradScalar 是一個有狀態對象。使用此功能保存模型checkpoint需要和模型權重一起寫入和讀取磁盤。用 state _ dict 和 load _ state _ dict 對象方法(在 PyTorch 文檔中有介紹)可以很容易地做到這一點。

自動混合精度訓練拼圖的另一半是 torch.cuda.amp.autocast 上下文管理器。Autocast實現了 fp32-> fp16轉換?;叵胍幌?ldquo;混合精度是如何工作的“中的內容,由于不同的操作以不同的速率累積誤差,并非所有的操作都可以在 fp16中安全運行。下面的截圖來自 amp 模塊文檔,介紹了autocast如何處理 PyTorch 中可用的各種操作:

這個列表主要由矩陣乘法和卷積兩部分組成,還有簡單的線性函數。

這些操作在 fp16中是安全的,但是在輸入有 fp16和 fp32混合的情況下,這些操作具有向上適配(up-casting)規則,以確保它們不會出問題。注意,這個列表還包括另外兩個基本的線性代數運算: 矩陣/向量點積和向量叉積。

對數、指數、三角函數、正規函數、離散函數和(大)和在 fp16中是不安全的,必須在 fp32中執行。

通過瀏覽這個列表,在我看來,大多數層都會從autocasting中受益,這要歸功于它們內部對基本線性代數操作的依賴,但大多數激活函數卻不是。卷積層是最大贏家。

啟用sutocasting非常簡單。你只需要做的就是使用autocast上下文管理器包好模型的正向傳播:

  1. with torch.cuda.amp.autocast(): 
  2.     y_pred = model(X_batch).squeeze() 
  3.     loss = self.loss_fn(y_pred, y_batch) 

以這種方式包裝前向傳播,可以自動打開后傳(如 loss.backwards ())的autocasting,因此不需要調用兩次autocast。

只要你遵循PyTorch 的最佳實踐(例如,避免in-place操作) ,autocasting基本上就可以“正常工作”。它甚至可以使用多GPU DistributedDataParallel API (只要遵循建議的策略,每個 GPU 只使用一個進程)。只需一個小調整,多GPU DataParallel API也可以用。Pytorch 文檔中的 Automatic Mixed Precision Examples 頁面的“Working with multiple GPUs”部分是關于這個主題的一個方便的參考。個人觀點,有一個要記住的重點是: "優先用 binary cross entropy with logits 而不是 binary cross entropy"。

Benchmarks性能

此時,我們已經了解了什么是混合精度,什么是張量核,以及 PyTorch API 如何實現自動混合精度。唯一剩下的就是看看一些真實世界的性能benchmarks!

我曾經用自動混合精度訓練過三個非常不一樣的神經網絡,還有一次沒用,通過 Spell API 調用 V100s (上一代張量核)和 T4s (當代張量核)。我分別使用了 AWS EC2實例、 p3.2xlarge 和 g4dn.xlarge,最近的 PyTorch 1.6 nightly 和 CUDA 10.0。所有模型的收斂都是一致的,即沒有一個模型發現混合精度網絡和原網絡在訓練損失上有任何差異。訓練的網絡如下:

  • 前饋, 一個前饋神經網絡,訓練數據來自Kaggle比賽Rossman Store Samples
  • UNet, 一個中等大小的原版UNet 圖像分割網絡, 在數據集Segmented Bob Ross Images 上訓練
  • BERT, 一個大的 NLP transformer 模型,使用bert-base-uncased 骨干(通過 huggingface),及數據來自Kaggle競賽 Twitter Sentiment Extraction

結果如下:

由于前饋網絡非常小,混合精度訓練對它沒有任何好處。

UNet 是一個中等規模的卷積模型,共有7,703,497個參數,從混合精度訓練中得到了顯著的好處。有趣的是,雖然 V100和 T4都受益于混合精度訓練,但 T4的好處要大得多: 節省5%時間vs. 高達30%的時間。

BERT 是一個很大的模型,在這里使用混合精度訓練節省時間,從中等模型的“很好”到了“必須擁有”。在Volta或Turing GPU 上訓練,自動混合精度將為大型模型減少50% 到60% 的訓練時間!

這是一個巨大的優勢,尤其是當你考慮到增加的復雜性極小時——只需要對模型訓練腳本進行四到五行代碼修改。在我看來:

混合精度應該是你對模型訓練腳本進行的最先性能優化之一。

內存呢?

正如我在“混合精度是如何工作的”一節中解釋的那樣,在內存中fp16矩陣的大小是fp32矩陣的一半,因此,混合精度訓練的另一個據稱的優勢是內存使用率。GPU 內存的瓶頸遠小于 GPU 的計算能力,但仍有很大的優化價值。你的內存使用效率越高,你可以在 GPU 上使用的batch size就越大。

PyTorch 在模型訓練過程開始時保留一定數量的 GPU 內存,并在訓練期間保留這些內存。這可以防止其它進程在訓練過程中搶占過多的 GPU 內存,迫使 PyTorch 訓練腳本崩潰并出現 OOM 錯誤。

以下是啟用混合精度訓練對 PyTorch 內存保留行為的影響:

有趣的是,雖然兩個較大的模型都看到了切換到混合精度的好處,UNet 從切換中得到的好處比 BERT 多得多。PyTorch 內存分配行為對我來說非常不透明,所以我不知道為什么會出現這種情況。

總結

在即將發布的 PyTorch 1.6版本中,自動混合精度訓練是一個易于使用且功能強大的新特性,該版本承諾將在最新的 NVIDIA GPU 上運行的大型模型訓練工作加快60% 。

雖然這種技術已經存在了一段時間,但是對于普通用戶來說還不是很容易理解,因為直到現在它還沒有一個原生 PyTorch API。

要直接從源代碼中了解更多關于混合精度訓練的信息,請參閱 PyTorch master 文檔中的automatic mixed precision package和automatic mixed precision examples頁面。

想自己測試一下這個功能?安裝最新的 PyTorch nightly非常簡單: 查看 PyTorch 主頁上的說明了解如何安裝。

想要自己復現這些benchmarks嗎?所有模型源代碼都可以在 GitHub 上的 ResidentMario/spell-feedforward-rossman, ResidentMario/spell-unet-bob-ross, 和 ResidentMario/spell-tweet-sentiment-extraction 庫中獲得。

 

責任編輯:張燕妮 來源: 新智元
相關推薦

2020-07-29 15:07:55

開發技能工具

2024-09-26 00:11:01

2021-12-06 20:32:41

AI

2024-10-14 08:19:15

2023-08-14 07:42:01

模型訓練

2020-08-31 14:55:48

代碼開發AI

2022-07-13 16:09:19

模型AI訓練

2023-02-19 15:26:51

深度學習數據集

2020-01-21 22:23:18

代碼開發AI

2023-05-04 15:53:34

強化學習開發

2024-09-09 06:20:00

PyTorch代碼

2025-03-10 09:10:00

2023-02-09 16:32:16

混合精度深度學習

2024-04-09 15:22:24

2023-11-02 12:49:00

AI模型

2023-11-10 09:41:44

Python代碼

2025-10-14 09:00:00

2024-11-27 14:30:00

模型訓練

2019-11-26 09:47:50

代碼開發工具

2022-12-05 10:01:41

代碼模型
點贊
收藏

51CTO技術棧公眾號

精品91自产拍在线观看一区| 天堂在线资源8| 成人短视频在线观看| silk一区二区三区精品视频| 视频一区中文字幕国产| 欧美一区二区精品在线| 日韩欧美精品一区二区三区经典| 国产一级做a爱免费视频| 精品九九久久| 国产日韩三级在线| 97人人模人人爽人人喊中文字| 亚洲久久中文字幕| 免费在线一级视频| 亚洲毛片视频| 精品国产区一区| 成人黄色片视频| 午夜小视频免费| 亚洲伦伦在线| 一夜七次郎国产精品亚洲| 黄色国产精品视频| 哥也色在线视频| 欧美国产激情二区三区| 日本不卡视频在线播放| 亚洲av片不卡无码久久| 亚洲一级少妇| 91丨九色丨黑人外教| 97在线视频免费播放| 日本国产一级片| 国内精品久久久久久野外| 日本欧美一区二区三区乱码| 影音先锋欧美精品| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲xxxxx电影| 婷婷激情四射网| 国产亚洲字幕| 亚洲综合免费观看高清完整版在线| 亚洲在线第一页| 久草热在线观看| 欧美hentaied在线观看| 欧美精品三级在线观看| 久久精品在线免费视频| 亚洲精品国产一区二| 亚洲日本欧美| 色综合视频一区中文字幕| 欧美性猛交xx| 韩国成人二区| 国产欧美中文在线| 成人女保姆的销魂服务| 日韩成人毛片视频| 噜噜噜天天躁狠狠躁夜夜精品| 午夜影院久久久| 日韩国产欧美精品| 日韩电影在线观看完整版| 奇米综合一区二区三区精品视频| 91精品国产91久久久久福利| 久久久久久久久精| 深爱激情综合| 日韩欧美中文一区二区| 黑人糟蹋人妻hd中文字幕 | 欧美一区二区色| 午夜影院黄色片| 日韩欧美中文字幕在线视频 | 成人免费性视频| 国产suv一区二区| 亚洲美女视频在线免费观看| 亚洲午夜久久久久久久| 99精品视频免费版的特色功能| 福利网站在线观看| 欧美国产日产图区| 午夜精品一区二区在线观看 | 成人亚洲一区二区一| 欧美在线视频免费| 一级一片免费看| 欧美91精品| 亚洲午夜色婷婷在线| 国产 欧美 在线| 久久伊人精品| 欧美在线色视频| 人妻少妇精品无码专区二区| 99在线视频影院| 国产精品毛片大码女人| 国产欧美日本在线| 国产女18毛片多18精品| 亚洲欧美日韩视频二区| 欧美日本高清视频| 久久久久久久久久久久久久久| 国产精品日本一区二区不卡视频| 欧美人成免费网站| 777米奇影视第四色| 精品人妻中文无码av在线| 激情四射综合网| 精品国产一区二区三区四区| 精品免费日韩av| 精品亚洲视频在线| 午夜日韩成人影院| 图片区小说区区亚洲影院| 中文精品视频一区二区在线观看| 天堂v视频永久在线播放| 国产乱码精品一区二区三 | 一区一区视频| 1区2区在线| 欧美日韩一区二区三区四区五区| 欧美日韩一道本| 日韩欧美一起| 亚洲精选在线视频| 国产又粗又大又爽的视频| 91啦中文在线| 日本一区二区动态图| av磁力番号网| 毛片无码国产| 91成人网在线| 精品人妻在线视频| 动漫视频在线一区| 精品久久人人做人人爱| 亚洲v国产v欧美v久久久久久| 888久久久| 免费av一区二区| 老妇女50岁三级| 欧美喷水视频| 欧美激情xxxx| 中文在线a天堂| 日本不卡123| 黑人另类av| 亚洲av成人精品日韩在线播放| 国产精品视频在线看| 欧美男女爱爱视频| 国产日韩中文在线中文字幕| 亚洲香蕉成视频在线观看| 免费在线观看黄网站| 影音先锋久久| 91高清视频在线免费观看| 国产精品热久久| 国产不卡在线视频| 精品日产一区2区三区黄免费| 色综合久久影院| 日韩理论在线观看| 亚洲欧美一区二区原创| 日本在线观看网站| 欧美小视频在线| 久久久久久久片| 人人玩人人添人人澡欧美| 欧美日韩免费高清一区色橹橹 | 国产日产欧美一区二区三区 | heyzo高清中文字幕在线| 制服丝袜日韩国产| 中文字幕人妻熟女人妻a片| 日韩大片在线观看| 欧美成年人视频网站欧美| 中国女人真人一级毛片| 久久久久久久性| 亚洲一区二区三区欧美| 最爽无遮挡行房视频在线| 亚洲成人一区在线| 青青青在线视频免费观看| 一区在线不卡| 亚洲精品99久久久久中文字幕| 中文字幕免费视频| 首页综合国产亚洲丝袜| 青青成人在线| 在线免费av导航| 91精品国产91热久久久做人人| 波兰性xxxxx极品hd| 黄色国产精品| 国产精品电影在线观看| 国产绿帽刺激高潮对白| 亚洲人精品午夜| 国产吃瓜黑料一区二区| 影音先锋国产精品| 久久久com| av网址在线| 欧美mv日韩mv亚洲| 成年人午夜视频| 久久品道一品道久久精品| 中文字幕在线乱| 国产欧美88| 久久久亚洲影院| 艳妇乳肉豪妇荡乳av无码福利 | 制服丝袜专区在线| 亚洲美女在线看| 亚洲国产精品久| zzijzzij亚洲日本少妇熟睡| 亚洲成人网上| 麻豆一区在线| 欧美精品成人91久久久久久久| 亚洲av无码乱码国产精品fc2| 国产精品美女视频| 蜜桃视频无码区在线观看| 亚洲欧洲一级| 日韩精彩视频| 国产一精品一av一免费爽爽| 久久久久久久久久久免费| 欧美精品a∨在线观看不卡| 精品视频在线视频| 久久精品视频9| 欧美高清在线一区二区| 91精产国品一二三| 日韩av在线播放中文字幕| 法国空姐在线观看免费| 亚洲色图丝袜| 91国产高清在线| aaa在线观看| 亚洲第一二三四五区| 国产小视频在线观看免费| 久久久精品免费免费| 成人三级做爰av| 日韩激情在线观看| 欧美日韩在线精品一区二区三区| 搞黄网站在线看| 中文字幕日韩在线播放| 伊人成年综合网| 亚洲在线免费播放| 青青青手机在线视频| 99re这里都是精品| 国产黄视频在线| 99欧美视频| 91视频国产精品| 成年视频在线观看| 伊人成人开心激情综合网| 国产小视频一区| 黄色一区二区在线观看| 懂色av粉嫩av蜜臀av一区二区三区| jvid福利写真一区二区三区| 天堂在线一区二区三区| 日韩电影在线免费看| 日韩小视频在线播放| 无码少妇一区二区三区| 青青草一区二区| 日本一本在线免费福利| 日韩视频免费中文字幕| www.国产免费| 午夜电影网一区| 九九免费精品视频| 亚洲免费毛片网站| 国产精品国产精品88| 国产欧美综合色| 日韩精品无码一区二区三区久久久| caoporen国产精品视频| 国产免费无码一区二区| 国产一区二区三区在线看麻豆| 青青草视频在线视频| 精品精品国产毛片在线看| 99c视频在线| 欧美aa视频| 欧洲成人免费视频| 日韩激情电影免费看| 在线免费观看羞羞视频一区二区| 五月婷婷免费视频| 亚洲国产成人久久综合| 日韩中文字幕影院| 欧洲一区二区三区在线| 狠狠人妻久久久久久综合| 成人免费在线观看入口| 久久久久99精品成人| 国产suv一区二区三区88区| 亚洲精品在线视频播放| 精品一区二区三区免费| 国产一级爱c视频| 樱桃成人精品视频在线播放| 97视频在线免费| 一区二区高清| 熟妇人妻va精品中文字幕| 一区二区三区在线观看免费| 精品国产乱码久久久久久久软件 | 五月天色一区| 久久精品av| 黄色影视在线观看| 亚洲视频狠狠| 日韩欧美精品在线观看视频| 久热精品在线| 91亚洲精品久久久蜜桃借种| 国产综合久久久久久鬼色| 超碰人人cao| 91热门视频在线观看| 久久亚洲AV成人无码国产野外 | 免费黄色三级网站| 精久久久久久久久久久| 免费成人在线视频网站| 久久精品综合| 日韩精品xxxx| 美女mm1313爽爽久久久蜜臀| 国产二区视频在线播放| 欧美日韩精品| 国产99久久九九精品无码| 欧美a级理论片| 黄色片一级视频| 麻豆精品视频在线观看免费| 国产伦精品一区二区三区妓女下载 | 国模精品一区二区| 亚洲第一页中文字幕| 能在线看的av| 欧美成人四级hd版| 在线天堂资源| 91亚洲精品在线| 亚洲精品国模| 99精品一区二区三区的区别| 亚洲黄色视屏| 在线观看免费不卡av| www.日韩在线| fc2ppv在线播放| 日韩毛片在线免费观看| 日韩xxx高潮hd| 亚洲超碰97人人做人人爱| 天天干,天天干| 精品少妇一区二区| av资源在线观看免费高清| 国产亚洲aⅴaaaaaa毛片| 4438x成人网全国最大| 日韩av免费在线| 色老太综合网| 丁香五月网久久综合| 99精品中文字幕在线不卡| 亚洲不卡1区| 欧美亚洲一区| 日本性生活一级片| 99re这里只有精品视频首页| 国产又色又爽又高潮免费 | 国产乱码在线观看| 日韩av在线免费| 黄网在线观看| 91av在线免费观看视频| 日韩三级网址| 正在播放一区| 免费看欧美美女黄的网站| av无码一区二区三区| 久久一区二区视频| 久久视频免费看| 欧美一区二区女人| 网友自拍视频在线| 国产精品久久久久久久久久新婚| 成人高清一区| 91精品久久久久久久久久久久久| 国产一区二区av在线| 欧美激情论坛| 亚洲人成高清| 日本不卡视频一区| 亚洲伊人伊色伊影伊综合网| 日韩成人免费在线视频| 日韩一区二区三区四区| 老司机午夜在线视频| 国产欧美韩国高清| 亚洲一区二区三区四区电影| 国产欧美一区二区在线播放| 在线看片不卡| 热久久久久久久久| 亚洲婷婷国产精品电影人久久| 中文字幕永久在线视频| 中文字幕日韩免费视频| jizzyou欧美16| 中文字幕不卡每日更新1区2区| 麻豆国产91在线播放| 尤物在线免费视频| 欧美一区二区在线看| 在线观看午夜av| 99久久精品免费看国产一区二区三区 | 亚洲另类欧美自拍| 欧美日韩美女| 亚洲免费视频一区| 国内国产精品久久| 美女毛片在线观看| 精品粉嫩aⅴ一区二区三区四区| av蜜臀在线| 欧美三日本三级少妇三99| 日韩国产精品久久| 天天看天天摸天天操| 日韩欧美亚洲国产另类 | 精品国产一区二区三区四区在线观看 | 欧美三级欧美一级| 国产福利视频在线观看| 91九色在线免费视频| 久久99视频| 不卡的av中文字幕| 亚洲激情自拍视频| 中文字幕福利视频| 操日韩av在线电影| 国产69精品久久| 潘金莲一级淫片aaaaa免费看| 国产激情偷乱视频一区二区三区| 欧美三级视频网站| 欧美日韩国产高清一区二区三区| 国产美女在线观看| 国内外成人免费视频| 日日摸夜夜添夜夜添精品视频| 992在线观看| 精品久久久久久久久久久院品网 | 在线视频你懂得一区二区三区| 92国产在线视频| 成人免费看片网址| 日韩中文字幕麻豆| 欧美黄色aaa| 亚洲精品视频久久| av在线最新| 亚洲成人午夜在线| 成人综合婷婷国产精品久久| 国产又黄又粗又爽| 日韩av在线资源| 四虎影视国产精品| 黄色一级在线视频| 中文字幕一区二区在线播放| 国产一卡二卡三卡| 亚洲欧洲第一视频|