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

Pytorch 彈性訓(xùn)練極簡(jiǎn)實(shí)現(xiàn)

共 14920字,需瀏覽 30分鐘

 ·

2023-10-23 21:34

點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

    
    
重磅干貨,第一時(shí)間送達(dá)

由于工作需要,最近在補(bǔ)充分布式訓(xùn)練方面的知識(shí)。經(jīng)過一番理論學(xué)習(xí)后仍覺得意猶未盡,很多知識(shí)點(diǎn)無法準(zhǔn)確get到(例如:分布式原語scatter、all reduce等代碼層面應(yīng)該是什么樣的,ring all reduce 算法在梯度同步時(shí)是怎么使用的,parameter server參數(shù)是如何部分更新的)。

著名物理學(xué)家,諾貝爾獎(jiǎng)得主Richard Feynman辦公室的黑板上寫了:"What I cannot create, I do not understand."。在程序員界也經(jīng)常有"show me the code"的口號(hào)。因此,我打算寫一系列的分布式訓(xùn)練的文章,將以往抽象的分布式訓(xùn)練的概念以代碼的形式展現(xiàn)出來,并保證每個(gè)代碼可執(zhí)行、可驗(yàn)證、可復(fù)現(xiàn),并貢獻(xiàn)出來源碼讓大家相互交流。

經(jīng)過調(diào)研發(fā)現(xiàn)pytorch對(duì)于分布式訓(xùn)練做好很好的抽象且接口完善,因此本系列文章將以pytorch為主要框架進(jìn)行,文章中的例子很多都來自pytorch的文檔,并在此基礎(chǔ)上進(jìn)行了調(diào)試和擴(kuò)充。

最后,由于分布式訓(xùn)練的理論介紹網(wǎng)絡(luò)上已經(jīng)很多了,理論部分的介紹不會(huì)是本系列文章的重點(diǎn),我會(huì)將重點(diǎn)放在代碼層面的介紹上面。

Pytorch - 分布式訓(xùn)練極簡(jiǎn)體驗(yàn):https://zhuanlan.zhihu.com/p/477073906

Pytorch - 分布式通信原語(附源碼):https://zhuanlan.zhihu.com/p/478953028

Pytorch - 手寫allreduce分布式訓(xùn)練(附源碼):https://zhuanlan.zhihu.com/p/482557067

Pytorch - 算子間并行極簡(jiǎn)實(shí)現(xiàn)(附源碼):https://zhuanlan.zhihu.com/p/483640235

Pytorch - 多機(jī)多卡極簡(jiǎn)實(shí)現(xiàn)(附源碼):https://zhuanlan.zhihu.com/p/486130584

1. 介紹

Pytorch在1.9.0引入了torchrun,用其替代1.9.0以前版本的torch.distributed.launch。torchrun在torch.distributed.launch 功能的基礎(chǔ)上主要新增了兩個(gè)功能:

  • Failover: 當(dāng)worker訓(xùn)練失敗時(shí),會(huì)自動(dòng)重新啟動(dòng)所有worker繼續(xù)進(jìn)行訓(xùn)練;
  • Elastic: 可以動(dòng)態(tài)增加或或刪除node節(jié)點(diǎn),本文將通過一個(gè)例子說明Elastic Training應(yīng)該如何使用;

本例中會(huì)先在Node0上啟動(dòng)4 GPU的worker group ,等其訓(xùn)練一段時(shí)間后,會(huì)在Node1上再啟動(dòng)4 GPU的workers,并與Node1上的workers構(gòu)成一個(gè)新的worker group,最終構(gòu)成一個(gè)2機(jī)8卡的分布式訓(xùn)練。

2. 模型構(gòu)建

一個(gè)簡(jiǎn)單的全連接模型神經(jīng)網(wǎng)絡(luò)模型

class ToyModel(nn.Module):
    def __init__(self):
        super(ToyModel, self).__init__()
        self.net1 = nn.Linear(1010)
        self.relu = nn.ReLU()
        self.net2 = nn.Linear(105)

    def forward(self, x):
        return self.net2(self.relu(self.net1(x)))

3. checkpoint 處理

由于再每次增加或刪除node時(shí),會(huì)將所有worker kill掉,然后再重新啟動(dòng)所有worker進(jìn)行訓(xùn)練。因此,在訓(xùn)練代碼中要對(duì)訓(xùn)練的狀態(tài)進(jìn)行保存,以保證重啟后能接著上次的狀態(tài)繼續(xù)訓(xùn)練。

需要保存的信息一般有如下內(nèi)容:

  • model :模型的參數(shù)信息
  • optimizer :優(yōu)化器的參數(shù)信心
  • epoch:當(dāng)前執(zhí)行到第幾個(gè)epoch

save和load的代碼如下所示

  • torch.save:利用python的pickle將python的object 進(jìn)行序列化,并保存到本地文件;
  • torch.load : 將torch.save后的本地文件進(jìn)行反序列化,并加載到內(nèi)存中;
  • model.state_dict(): 存儲(chǔ)了model 每個(gè)layer和其對(duì)應(yīng)的param信息
  • optimizer.state_dict():存儲(chǔ)了優(yōu)化器的參數(shù)信信息
def save_checkpoint(epoch, model, optimizer, path):
    torch.save({
    "epoch": epoch,
    "model_state_dict": model.state_dict(),
    "optimize_state_dict": optimizer.state_dict(),
}, path)

def load_checkpoint(path):
    checkpoint = torch.load(path)
    return checkpoint

4. 訓(xùn)練代碼

初始化邏輯如下:

  • 1~3行: 輸出當(dāng)前worker的關(guān)鍵環(huán)境變量,用于后面的結(jié)果展示
  • 5~8行:創(chuàng)建模型、優(yōu)化器和損失函數(shù)
  • 10~12行:初始化參數(shù)信息
  • 14~19行:如果存在checkpoint,則加載checkpoint,并賦值給model、optimizer和firt_epoch
    local_rank = int(os.environ["LOCAL_RANK"])
    rank = int(os.environ["RANK"])
    print(f"[{os.getpid()}] (rank = {rank}, local_rank = {local_rank}) train worker starting...")
    
    model = ToyModel().cuda(local_rank)
    ddp_model = DDP(model, [local_rank])
    loss_fn = nn.MSELoss()
    optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)
    optimizer.zero_grad()
    max_epoch = 100
    first_epoch = 0
    ckp_path = "checkpoint.pt"
    
    if os.path.exists(ckp_path):
        print(f"load checkpoint from {ckp_path}")
        checkpoint = load_checkpoint(ckp_path)
        model.load_state_dict(checkpoint["model_state_dict"])
        optimizer.load_state_dict(checkpoint["optimize_state_dict"])
        first_epoch = checkpoint["epoch"]

訓(xùn)練邏輯:

  • 1行:epoch執(zhí)行的次數(shù)為first_epoch到max_epoch,以便能夠在worker被重啟后繼續(xù)原有的epoch繼續(xù)訓(xùn)練;
  • 2行:為了展示動(dòng)態(tài)添加node效果,這里添加sleep函數(shù)來降低訓(xùn)練的速度;
  • 3~8行:模型訓(xùn)練流程;
  • 9行:為了簡(jiǎn)單,文本每個(gè)epoch進(jìn)行一次checkpoint保存;將當(dāng)前的epoch,model和optimizer保存到checkpoint中;
    for i in range(first_epoch, max_epoch):
        time.sleep(1# 為了展示動(dòng)態(tài)添加node效果,這里添加sleep函數(shù)來降低訓(xùn)練的速度
        outputs = ddp_model(torch.randn(2010).to(local_rank))
        labels = torch.randn(205).to(local_rank)
        loss = loss_fn(outputs, labels)
        loss.backward()
        print(f"[{os.getpid()}] epoch {i} (rank = {rank}, local_rank = {local_rank}) loss = {loss.item()}\n")
        optimizer.step()
        save_checkpoint(i, model, optimizer, ckp_path)

5. 啟動(dòng)方式

由于我們使用torchrun來啟動(dòng)多機(jī)多卡任務(wù),無需使用spawn接口來啟動(dòng)多個(gè)進(jìn)程(torchrun會(huì)負(fù)責(zé)將我們的python script啟動(dòng)為一個(gè)process),因此直接調(diào)用上文編寫的train函數(shù),并在前后分別添加DistributedDataParallel的初始化和效果函數(shù)即可。

下面代碼描述了上文train接口的調(diào)用。

def run():
    env_dict = {
        key: os.environ[key]
        for key in ("MASTER_ADDR""MASTER_PORT""WORLD_SIZE""LOCAL_WORLD_SIZE")
    }
    print(f"[{os.getpid()}] Initializing process group with: {env_dict}")
    dist.init_process_group(backend="nccl")
    train()
    dist.destroy_process_group()


if __name__ == "__main__":
    run()

本例中使用torchrun來執(zhí)行多機(jī)多卡的分布式訓(xùn)練任務(wù)(注:torch.distributed.launch 已經(jīng)被pytorch淘汰了,盡量不要再使用)。啟動(dòng)腳本描述如下(注:node0和node1均通過該腳本進(jìn)行啟動(dòng))

  • --nnodes=1:3 :表示當(dāng)前訓(xùn)練任務(wù)接受最少1個(gè)node,最多3個(gè)node參與分布式訓(xùn)練;
  • --nproc_per_node=4:表示每個(gè)node上節(jié)點(diǎn)有4個(gè)process
  • --max_restarts=3: worker group最大的重啟次數(shù);這里需要注意的是,node fail、node scale down和node scale up都會(huì)導(dǎo)致restart;
  • --rdzv_id=1:一個(gè)unique的job id,所有node均使用同一個(gè)job id;
  • --rdzv_backend: rendezvous的backend實(shí)現(xiàn),默認(rèn)支持c10d和etcd兩種;rendezvous用于多個(gè)node之間的通信和協(xié)調(diào);
  • --rdzv_endpoint:rendezvous的地址,應(yīng)該為一個(gè)node的host ip和port;
torchrun \
--nnodes=1:3\
--nproc_per_node=4\
--max_restarts=3\
--rdzv_id=1\
--rdzv_backend=c10d\
--rdzv_endpoint="192.0.0.1:1234"\
train_elastic.py

6. 結(jié)果分析

代碼:BetterDL - train_elastic.py:https://github.com/tingshua-yts/BetterDL/blob/master/test/pytorch/DDP/train_elastic.py

運(yùn)行環(huán)境: 2臺(tái)4卡 v100機(jī)器

image: pytorch/pytorch:1.11.0-cuda11.3-cudnn8-runtime

gpu: v100

先在node0上執(zhí)行執(zhí)行啟動(dòng)腳本

torchrun \
--nnodes=1:3\
--nproc_per_node=4\
--max_restarts=3\
--rdzv_id=1\
--rdzv_backend=c10d\
--rdzv_endpoint="192.0.0.1:1234"\
train_elastic.py

得到如下結(jié)果

  • 2~5行:當(dāng)前啟動(dòng)的是單機(jī)4卡的訓(xùn)練任務(wù),因此WORLD_SIZE為4, LOCAL_WORKD_SIZE也為4
  • 6~9行:共有4個(gè)rank參與了分布式訓(xùn)練,rank0~rank3
  • 10~18行: rank0~rank3 均從epoch=0開始訓(xùn)練
r/workspace/DDP# sh run_elastic.sh
[4031] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '44901', 'WORLD_SIZE': '4', 'LOCAL_WORLD_SIZE': '4'}
[4029] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '44901', 'WORLD_SIZE': '4', 'LOCAL_WORLD_SIZE': '4'}
[4030] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '44901', 'WORLD_SIZE': '4', 'LOCAL_WORLD_SIZE': '4'}
[4032] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '44901', 'WORLD_SIZE': '4', 'LOCAL_WORLD_SIZE': '4'}
[4029] (rank = 0, local_rank = 0) train worker starting...
[4030] (rank = 1, local_rank = 1) train worker starting...
[4032] (rank = 3, local_rank = 3) train worker starting...
[4031] (rank = 2, local_rank = 2) train worker starting...
[4101] epoch 0 (rank = 1, local_rank = 1) loss = 0.9288564920425415
[4103] epoch 0 (rank = 3, local_rank = 3) loss = 0.9711472988128662
[4102] epoch 0 (rank = 2, local_rank = 2) loss = 1.0727070569992065
[4100] epoch 0 (rank = 0, local_rank = 0) loss = 0.9402943253517151
[4100] epoch 1 (rank = 0, local_rank = 0) loss = 1.0327017307281494
[4101] epoch 1 (rank = 1, local_rank = 1) loss = 1.4485043287277222
[4103] epoch 1 (rank = 3, local_rank = 3) loss = 1.0959293842315674
[4102] epoch 1 (rank = 2, local_rank = 2) loss = 1.0669530630111694
...

在node1上執(zhí)行與上面相同的腳本

torchrun \
--nnodes=1:3\
--nproc_per_node=4\
--max_restarts=3\
--rdzv_id=1\
--rdzv_backend=c10d\
--rdzv_endpoint="192.0.0.1:1234"\
train_elastic.py

node1上結(jié)果如下:

  • 2~5行:由于添加node1,當(dāng)前執(zhí)行的是2機(jī)8卡的分布式訓(xùn)練任務(wù),因此WORLD_SIZE=8, LOCAL_WORLD_SIZE=4
  • 6~9行:當(dāng)前node1上workers的rank為rank4 ~rank7
  • 13~20行: 由于node1是在node0上work訓(xùn)練到epoch35的時(shí)候加入的,因此其接著epoch 35開始訓(xùn)練
/workspace/DDP# sh run_elastic.sh
[696] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[697] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[695] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[694] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[697] (rank = 7, local_rank = 3) train worker starting...
[695] (rank = 5, local_rank = 1) train worker starting...
[694] (rank = 4, local_rank = 0) train worker starting...
[696] (rank = 6, local_rank = 2) train worker starting...
load checkpoint from checkpoint.ptload checkpoint from checkpoint.pt
load checkpoint from checkpoint.pt
load checkpoint from checkpoint.pt
[697] epoch 35 (rank = 7, local_rank = 3) loss = 1.1888569593429565
[694] epoch 35 (rank = 4, local_rank = 0) loss = 0.8916441202163696
[695] epoch 35 (rank = 5, local_rank = 1) loss = 1.5685604810714722
[696] epoch 35 (rank = 6, local_rank = 2) loss = 1.11683189868927
[696] epoch 36 (rank = 6, local_rank = 2) loss = 1.3724170923233032
[694] epoch 36 (rank = 4, local_rank = 0) loss = 1.061527967453003
[695] epoch 36 (rank = 5, local_rank = 1) loss = 0.96876460313797
[697] epoch 36 (rank = 7, local_rank = 3) loss = 0.8060566782951355
...

node0上結(jié)果如下:

  • 6~9行: node0上的works在執(zhí)行到epoch 35時(shí),node1上執(zhí)行了訓(xùn)練腳本,請(qǐng)求加入到訓(xùn)練任務(wù)中
  • 10~13行:所有workers重新啟動(dòng),由于添加了node1,當(dāng)前執(zhí)行的是2機(jī)8卡的分布式訓(xùn)練任務(wù),因此WORLD_SIZE=8, LOCAL_WORLD_SIZE=4
  • 14~17行:當(dāng)前node1上works的rank為rank0~rank3
  • 18~21行:加載checkpoint
  • 22~30行:接著checkpoint中的model、optimizer和epoch繼續(xù)訓(xùn)練
...
[4100] epoch 35 (rank = 0, local_rank = 0) loss = 1.0746158361434937
[4101] epoch 35 (rank = 1, local_rank = 1) loss = 1.1712706089019775
[4103] epoch 35 (rank = 3, local_rank = 3) loss = 1.1774182319641113
[4102] epoch 35 (rank = 2, local_rank = 2) loss = 1.0898035764694214
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 4100 closing signal SIGTERM
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 4101 closing signal SIGTERM
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 4102 closing signal SIGTERM
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 4103 closing signal SIGTERM
[4164] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[4165] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[4162] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[4163] Initializing process group with: {'MASTER_ADDR': '192.0.0.1', 'MASTER_PORT': '42913', 'WORLD_SIZE': '8', 'LOCAL_WORLD_SIZE': '4'}
[4162] (rank = 0, local_rank = 0) train worker starting...
[4163] (rank = 1, local_rank = 1) train worker starting...
[4164] (rank = 2, local_rank = 2) train worker starting...
[4165] (rank = 3, local_rank = 3) train worker starting...
load checkpoint from checkpoint.pt
load checkpoint from checkpoint.pt
load checkpoint from checkpoint.pt
load checkpoint from checkpoint.pt
[4165] epoch 35 (rank = 3, local_rank = 3) loss = 1.3437936305999756
[4162] epoch 35 (rank = 0, local_rank = 0) loss = 1.5693414211273193
[4163] epoch 35 (rank = 1, local_rank = 1) loss = 1.199862003326416
[4164] epoch 35 (rank = 2, local_rank = 2) loss = 1.0465545654296875
[4163] epoch 36 (rank = 1, local_rank = 1) loss = 0.9741991758346558
[4162] epoch 36 (rank = 0, local_rank = 0) loss = 1.3609280586242676
[4164] epoch 36 (rank = 2, local_rank = 2) loss = 0.9585908055305481
[4165] epoch 36 (rank = 3, local_rank = 3) loss = 0.9169824123382568
...


      
      
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

交流群


歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


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

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲AV高清| 成人视频123| 神马久久午夜| 中文字幕一区二区二三区四区| jizz丝袜| 狼友视频免费观看| 躁BBB躁BBB躁BBBBBB日| 久久成人片| 欧美日韩国产中文字幕| 艹逼网| 中文字幕播放| 九九九国产| 97人人爽| 丰满人妻无码| 亚洲永久免费精品| 亚洲成人影音先锋| 国产特黄级AAAAA片免| 无码任你躁久久久久| 日本www色| a视频免费观看| 久久久久麻豆V国产精华液好用吗 色噜噜狠狠一区二区三区牛牛影视 | 日韩精品区| 精品乱子伦一区二区三区免费播成 | 婷婷色在线播放| 亚洲精品秘一区二区三区在线观看 | 99精品视频北条麻妃国产版| 国产精品久久久久久久久免费无码| 岛国av在线播放| 亚洲区一区二| 丰满的人妻一区二区10| 91成人做爰A片| 高清无码视频免费观看| 亚洲免费黄色片| 亚洲美女网站| 一级片黄色免费| 日本黄色片| 日韩一级黄| 古装一级无遮挡A片| 天堂网AV在线| 国产视频入口| 97色色网站| 青青免费视频| 十八禁网站在线| 国产精品999| 四川少妇BBB| 激情久久久| 嫩草视频在线观看| 国产黄色视屏| 88在线无码精品秘入口九色| 尻屄视频免费| 亚欧美日韩| 青青草综合| 欧美爆操视频| 免费在线黄片| 亚洲中文在线视频| 99人妻人人爽人人添人人精品| 53岁露大奶熟女偷情贴吧| 国产伦子伦一级A片免费看老牛| 日韩一欧美| 国产精品久久久久久久久久久久久久 | 亚洲AVwww| 人妻日韩| 少妇高潮喷水视频| 粉嫩小泬BBBBBB免费看| 屁屁影院CCYYCOM国产| 午夜免费无码视频| 按摩性高湖婬AAA片A片中国 | 国产精品视频免费在线观看| 四虎成人免费视频| 在线视频一区二区三区四区| 无码人妻精品一区二区蜜桃漫画| 大色AV| 97人妻人人澡人人| 大香蕉AV电影| 日韩无码波多野结衣| 大鸡巴视频在线| 国产91探花系列在线观看| 欧美一级a| 国产成人久久| 天天干天天操天天| 欧美色道| 国产传媒三级| 成人无码免费| 日本一区免费| 日韩婬乱片A片AAA真人视频| 国产中文在线视频| 成人中文字幕在线观看| 北条麻妃精品在线| 婷婷激情视频| 牛牛AV在线| 亚洲精品国产AV婷婷| 亚洲热视频在线观看| av天堂资源在线| 黄色av网站在线观看| 99久久久久久久久久| 手机在线看片av| 中国一级黄片| 陈冠希和张柏芝mv| 26∪u∪成人网站| 91女人18片女毛片60分钟| 伊人久久国产| 日韩毛片中文字幕| 五月天激情性爱| 天天操夜| 婷婷五月影院| 亚洲老鸭窝| 美女91网站色| 高清无码免费观看视频| 免费污视频在线观看| 亚洲精品成人AV| 日AV在线无| 欧美操B电影| 青榴视频免费观看| 色逼五月| 亚洲v欧美v| www五月天com| 狼友视频免费观看| 亚洲狼人久久久精品| 欧美日韩免费观看视频| 99精品国产一区二区| 99精品国产一区二区| 狼人综合视频| 97久久超碰| 无码人妻蜜桃| 欧美成人一级片| 色悠悠久久综合| 丰满人妻一区二区三区四区54| 亚洲精品免费在线观看| 天堂网AV在线| 无码人妻在线| 西西人体大胆ww4444多少集 | 欧美日韩亚洲另类| 999这里只有精品| 亚洲午夜无码久久久| 久艹AV| 99热思思| 蜜臀久久99精品久久一区二区| 国产精品国内自产| 午夜亚洲| 欧美色色色| 韩国日本美国免费毛片| 国产AV大香蕉| 粉嫩99精品99久久久久久特污兔 | 囯产伦精一区二区三区四区| 激情五月天色色| 亚洲日韩在线看| 国产亚洲精品成人a| 国产女人18毛片水真多成人如厕 | 成人小说视频| 黑人猛躁白人BBBBBBBBB| 国产精品视频网站| 亚洲色图成人网| 7799精品| 日产久久视频| 操碰在线视频| A片久久久| 韩国三级无码| 在线观看免费视频a| 精品丰满人妻一区二区三区免费观| 久久国产亚洲| 在线伊人| 69AV在线播放| 青青草大香蕉| 粉嫩av懂色av蜜臀av分享| 欧美淫乱视频| 欧美人人操| 亚洲最大的成人网站| 黑人一级| 中文人妻第9页| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 亚洲中文字幕成人| 噜噜噜久久久| 欧美AA视频| 国产毛片毛片毛片| 亚洲黄色电影网站| 日AV在线无| 美女网站色| 影音先锋91| 亚洲五区| 黄片网页| 精品国产乱码久久久久久郑州公司| 99热国产在线| 免费一级片视频| 久久综合加勒比| 午夜老司机福利一二三区| 欧美熟女在线| 91资源超碰| 小黄片网站| 大香蕉视频在线观看| 欧美熟妇另类久久久久久不卡| 在线无.码| 韩日高清无码| 久久AV电影| 777中文字幕| 国产AV资源网| 在线中文字幕av| 中文字幕无码在线观看| 俺去啦俺也去| 激情小说在线视频| 一级黄色操逼视频| 欧美色色色色色色| 91在线亚洲| 日本黄A级A片国产免费| 韩国一区二区在线观看| 日韩有码中文字幕在线观看| 五月天激情性爱| 欧美视频在线观看免费| 黄工厂精品视频在线播| 免费观看黄色一级片| 一级黄色A片视频| 午夜无码高清| 婷婷五月香| 人人摸人人| 亚洲伦理一区二区| 加勒比操逼| 91久久国产综合久久91精品网站| 国产乱伦电影| 亚洲视频中文字母| 99视频在线| 大地资源第三页在线观看免费播放最新| 男人操女人视频网站| 操美女视频网站| 国产三级黄色| 中文成人无字幕乱码精品区| 久久久久三级片| 日欧美美女逼| 成年人AV| 91精品日韩| 成人黄网免费观看视频| 青娱乐超碰| 99精品一区二区三区| 人人操超碰在线观看| 天天日天天拍| 亚洲一区二区视频| 黄片免费无码| 国产成人欧美| 国产成人无码区免费AV片在线| 成人无码精品| 人妻无码在线观看| 操逼爽| 91九色91蝌蚪91窝成人| 免费一级黄色片| 亚洲综合免费观看高清完整版在线观| 大香蕉尹人在线观看| 亚洲中午字幕| 欧美丝袜脚交xxxxBH| 日韩一区二区三区四区久久久精品有吗 | 天天玩夜夜玩天天玩国产99| 四虎影院污| 亚洲日韩欧美成人| 日韩免费一区| 久久成人18免费网站波多野结衣| 黑人又粗又大XXXXOO| 毛片1| 蜜桃av无码一区二区三区| 泄火熟妇2-ThePorn| 在线国产黄色| 男女乱伦视频| 翔田千里av| 国产18欠欠欠一区二区| 色综合色综合色综合| 91国产视频在线观看| 欧美一级片在线观看| 久久日韩无码| 成人网址大全| 麻豆精品久久久久久久99蜜桃| 青草视频精品| 蜜桃久久av一区| 无码AⅤ一区二区三区| 人人摸人人干| 一本一道波多野结衣潮喷视频| 日韩有码一区| 精品视频在线播放| 国产a片视频| 先锋资源av在线| 国产AV毛片| 欧美黄片无码| 国产豆花视频| 国内精品无码| 91大神精品| 9l视频自拍九色9l视频成人| 国产亚洲精品久久久久动| 亚洲天堂一级片| 另类欧美| 欧美久草| 国产一区二区久久| 农村三级片| 91在线小视频| 国产精品午夜在线观看| 熟妇槡BBBB槡BBBB图| 国内自拍视频在线观看| 美女视频黄a视频全免费不卡| 中文字幕在线观看有码| www.人人操| 天天谢天天干| 天天天天天天天干| 蜜桃av秘无码一区二区三区| 老鸭窝久久久| a片免费网站| 午夜免费福利| 中文字幕乱码中文乱码图片| 水蜜桃在线观看视频| 亚洲免费MV| 91久久久久久久18| AV一级片| 人人爱人人爽人人操| 91大香蕉视频| 精品人妻少妇| 欧美色视| 自拍偷拍欧美| 久久美女视频| 中日韩黄色视频| 超碰99热| 另类色| 超碰人人干人人操| 欧美精品在线观看视频| 国产精品久久久久久久久久久久| 欧美99视频| 青青草视频黄| 国产欧美激情| 2019人人操| 亚洲一区二区视频| 日韩国产传媒| 人人操在线观看| 俺去啦俺也去| 一区二区三区四区在线播放| AV大香蕉| 乱伦AV片| 97超碰大香蕉| 亚洲乱伦av| 国产精品午夜成人免费| 久久人妻熟女中文字幕av蜜芽 | 亚洲精品观看| 91乱子伦国产乱子伦| 亚州性爱| 特级无码| 男人的天堂一区| 91免费看| av免费观看网址| 日本中文字幕电影| 国产69视频在线观看| 九九热热| 另类老妇奶性生BBwBBw偷拍| 成人午夜无码视频| 麻酥酥在线视频| 美女啪啪视频| 一级a一级a爰片免费免免在线| 丁香五月欧美激情| 靠逼国产| 亚洲一级AV| 99国产精品久久久久久久| 一区二区视频在线| 欧美激情伊人| 91在线无码精品秘蜜桃入口| 91视频免费在线看| 狠狠干影院| 精品久久久无码| 亚洲av中文| 蜜桃一区| 亚洲综合免费观看| 亚洲午夜无码久久久| 中文字幕在线免费观看视频| 国产美女福利| 性爱无码视频| 大香蕉免费在线观看| 国产一级美女操逼视频免费播放| 美女操B| 奶大丰满一乱一视频一区二区三区在 | 免费在线观看黄片视频| 久久久一区二区三区| 特黄特色大片BBBB| 日韩精品成人专区无码| 天天超碰| 国产av一二三区| jizzjizz欧美| 成人福利免费视频| 操B网址| 人妻黄色| 日本成人视频| 日韩欧美国产综合| 日逼网址| 伊人久久香| 人人爱人人插高清| 精品无码专区| 国产性受XXXXXYX性爽| 婷婷免费视频| 一区二区三区福利| 在线播放亚洲| 大香蕉大香蕉视频网| 最近中文字幕2022在线观看A| 特级婬片AAAAAAA级| 中国一级黄片| 午夜理论片| 黄色操B视频| 欧美口爆| 怡春院AV| 成人在线观看网| 国产精品观看| 一级a一级a免费观看免免黄‘/| 日韩电影中文字幕| 无码人妻一区二区三区免水牛视频 | 欧美香蕉在线| 久久黄色网| 伊人精品在线| 日韩成人黄色视频| 五月婷婷亚洲| 日韩欧美大片在线观看| 这里只有精品视频| 色五月在线观看| 91操视频| 成人在线中文字幕| www.199麻豆在线观看网站| 欧美大片视频| 青青青草视频在线| 欧美精品网| 500部大龄熟乱4K视频| 国外成人性视频免费| 国产视频一区二区在线| 五月丁香花| 毛片1| 国产三级电影| 777视频在线观看| 337P大胆粉嫩银噜噜噜| 玉米地一级婬片A片| 五月天综合视频| 大香蕉伊人成人| 亚洲无码专区在线| 18啪啪网站| 日韩欧美不卡色不卡| 台湾成人在线| 在线视频内射| 久久九九99| 操逼在线看| 8050午夜一级| 青娱乐大香蕉| 黄色特级毛片| 国产成人久久777777| 日韩无码精品视频| 在线亚洲小视频| 91最新视频| 麻豆精品| 看黄片网站| 天天操人人射| 91香蕉视频在线| 免费观看黄色电影| 色999亚洲人成色| 嫩BBB嗓BBBB榛BBBB| 五月在线视频| 人人射人人射| 女人的天堂AV在线观看| 高清无码自拍| 蜜桃传媒入口| 国产女人操逼视频| 亚洲在线无码视频| 日韩无码少妇| 黄色视频免费观看| 最新中文字幕在线| 午夜福利视频91| 影音先锋91视频| 男女日逼视频| 欧美A黄| 亚洲综合二区| 伊人婷婷色香综合| 91人人人| 国产精品永久久久久久久久久| 91久久久裸身美女| 国产熟女乱伦视频| 伊人综合视频| 18禁在线看| 高清无码免费视频| 午夜福利资源| 又黄又爽视频| 日无码在线| 豆花视频| 午夜性爱AV| 欧美日韩国产91| 久久av综合| A片在线观看视频| 九九A片| 91操操操| 蜜桃91精品秘入口| 国产在线中文| 九九九欧美| 人人操人人看人人干| 91欧美日韩| 丰满岳乱妇一区二区三区| 日韩精品小电影| 女同一区二区三区| 国产小黄片| 你懂得在线| 国产视频无码在线| 亚洲一线在线观看| 日本中文字幕无码| 亚洲黄色一区| 乱伦激情视频| 国产盗摄AV| 中文字幕毛片| 黄片免费在线播放| 国产五月天婷婷| 免费+无码+精品| 超碰人人在线| 黄色福利在线观看| 丁香婷婷激情五月| 一区二区免费在线观看| 久久人妻无码中文字幕系列| 双飞人妻13p| 国产最新地址| 狠狠2021| 成人久久AV| 91人妻无码| 三级网站大全| 麻豆一区在线观看| 影音先锋男人天堂| 成人一二区| 在线观看黄色小视频| 一区二区国产精品| 亚洲免费a| 91麻豆国产视频| 国产成人秘免费观看一区二区三区| 做爰视频毛片蜜桃| 波多野59部无码喷潮| 男人资源在线| 五月天青青草超碰免费公开在线观看 | 一级黄色录像带| 国产乱论视频| 亚洲天堂福利| 按摩忍不住BD中文字幕| 日本中文字幕无码| 亚洲精品无码中文字幕| 日韩成人一级片| 国产黄色片在线免费观看| 久色无码| 国产欧美日韩在线| 成人看片黄a免费看视频| 人人做人人做人人做,人人做全句下一 | 中文字幕亚洲无码视频| 欧美香蕉在线| 婷婷五月电影| 久9热| 日本精品码喷水在线看| 日韩欧美国产精品| 国产精品一区二区在线观看| 躁BBB躁BBB躁BBBBBB日视频 | 最新中文字幕一区| 亚洲激情网| 黄色视频网站在线观看免费| 91无码秘蜜桃一区二区三区-百度 精品人妻一区二区三区在线视频不卡 | 久草免费福利| 51嘿嘿嘿国产精品伦理| 88海外华人免费一区| 欧美日韩成人在线| 自拍偷拍视频网站| www.99av| 男女av免费| 欧美成人A片AAA片在线播放| 无码精品一区二区三区在线观看| 激情一区| 中文字幕日本| 91成人一区二区三区| 欧美日韩爱爱| 一级性爽AV毛片| 三级A片视频| 特黄特色一级特黄大片| 91丨豆花丨成人熟女| 亚洲AAA| 青娱乐成人| 成人三级视频在线观看| 国产精品久久无码| 中文字幕在线日本| 91嫖妓站街按店老熟女| 人妖无码| 777欧美| 动图综合亚洲综合欧美男男 | 久久国产精品在线| Al激情欧美| 日韩成人免费视频| 日韩无码中文字幕| 亚洲精品无码久久久| 日韩激情AV| 国产老熟女久久久| www.199麻豆在线观看网站| 精品无码不卡| 一本色道久久综合狠狠躁| 最新AV在线播放| 深爱激情五月天| 天天操网| 久久久久久成人电影| 一区二区三区精品视频| 搡女人视频国产一级午夜片| 国产精品视频在线免费观看| 欧美激情一级| 日逼大香蕉| 国产黄色片免费| 狠狠干,狠狠操| 特黄特色免费大片| 免费黄色在线观看| 亚洲操B| 久热国产视频| 特极西西444WWW大胆无码| 成人做爰100部免费网站| 艹逼国产| 中文在线资源| 中文字幕精品在线视频| 亚洲自拍中文字幕| 久久精品女同亚洲女同13| 一本久久综合亚洲鲁鲁五月天| 久操B网| 日韩一a| 九色九一| 日韩精品一区二区三区四区 | 中文字幕乱码中文字幕| 日韩爱爱免费视频| 91人妻人人澡人人爽精品| 伊香蕉大综综综合| 97超碰资源站| 免费在线观看视频a| 久草视频在线免费播放| 韩国成人免费无码免费视频| 2019中文字幕mv第三季歌词| www日本色| 欧美精品18videosex性欧美| 亚洲午夜久久久之蝌蚪窝| 殴美亚洲一流| 欧美性受XXXX黑人XYX性爽| 一级A片免费看| 搡BBB| 色综合色| 久久精品熟妇丰满人妻99| www.sese| 人人操操| 99久久精品国产一区色| 俺去啦在线| 亚洲三级片视频| 人妻少妇一区二区三区| 亚洲精品国产精品国自产曰本| 蜜臀AV成人精品| 特级西西人体444.444人体聚色| 99热5| 熟女嗷嗷叫高潮合集91| 精品免费在线观看| 黄色av免费观看| 九九在线观看视频| 天堂一区二区三区18| 国产视频1区| 日韩精品一二区| 婷婷色在线观看| 99无码人妻| 人人操比| 尤物视频官网| 日韩aaaaaa| 欧洲成人在线观看| 在线观看免费A片| 成人免看一级a一片A片| 热99re69精品8在线播放| 欧美性夜黄A片爽爽免费视频| 国产乱人| 超碰一级片| 福利导航在线| 亚洲另类色图| 在线国产小视频| 东京热AV在线| 91精品久久香蕉国产线看观看| 亚洲AV在线免费观看| 久久草在线观看| 神马午夜福利视频| 精品视频在线播放| 日日干干| 操逼视频,黄色大全| 人妻japanesewoman| 在线观看高清无码中文字幕| 香蕉成人视频| 五月天乱伦网| 成人国产片| 国产精品免费一区二区三区四区视频 | 日韩欧美精品| 国产成人视频免费| 成人h视频| 午夜av福利| 毛片视频免费观看| 国产福利91精品| 丁香五月av| 一级AA片| 成人播放视频| 欧美特级AAA| 久久嫩草精品| 婷婷在线影院| 日韩无码系列| 欧美午夜激情视频| 夜夜av| 欧美人妻日韩精品| 国产精品77777| 男女做爱视频网站| 人人操人人撸| 亚洲成人在线免费观看| 操逼免费观看| 日韩码线观看视频| 国产A级成人婬片1976| 亚洲色视频在线| 噼里啪啦免费观看视频大全 | 亚州成人视频| 久久久久久久精| 欧美视频中文字幕| 熟女人妻人妻の视频| 91黄色片| 日本特级黄色毛片| 国产三级AV在线观看| 亚洲成人在线一区| 九九九九九九精品视频| 四虎福利| 北条麻妃性爱视频| 亚洲成人久久久| 日韩免费在线观看视频| 国产成人AV在线| 国产精品久久久久久久久| 美国一级A片草草视频| 操一操干一干| 无码欧美人XXXXX日本无码| 亚洲国产精品VA在线看黑人| 天堂aaa| 亚洲中文字幕观看| 久久久成人免费电影| 黄a网站| 无码视频一区二区| 国产成人电影| 国产精品爽爽久久久| 久久久久久久久免费视频| 97人人爽人人爽人人爽人人爽| 老太色HD色老太HD-百度| 国产男女无套免费视频| 老熟女一区二区三区| 黄色毛片在线观看| 日韩成人精品| 性饥渴欧美老妇XXXXX| 日本精品视频在线| 大香蕉亚洲在线| 国产精品欧美一区二区| 国产又大又粗| 欧美成人无码A片免费| 免费A片视频| 久久av综合| 九月婷婷综合| 特级西西人体444www高清| 天天摸天天看| 无码人妻精品一区二区三千菊电影| 久久五月婷| 99九九网| 爱爱免费视频| 艹逼视频| 东北老女人操逼| 国产性爱精品| 亚洲性爱在线观看| 狼人色影院| 亚洲中文字幕免费观看视频| 国产在线97| 先锋影音av资源站| 日韩一级电影在线观看| 91成人影片| 亚洲最新视频| 95四川乱子伦视频国产| 无码视频在线免费播放| 一区二区无码免费| 91人妻人人澡人人爽人人| 日韩91| 人妻公日日澡久久久| 亚洲黄色在线播放| 久草免费在线观看视频| 特逼视频| 无码免费播放| 伊人久久在线| 996热re视频精品视频| 香蕉视频毛片| 特级黄色视频| 中文字幕成人在线| 一级a片在线免费观看| 成人在线无码视频| 内射视频在线免费观看| 国产又爽又黄免费视频免费| 久久精品99| 在线亚洲免费观看| 日韩欧美亚洲一区二区三区| 91探花秘在线播放偷拍| 免费看无码一级A片在线播放| 搡BBB搡BBBB搡BBBB-百度| 亚洲天堂AV2025| 又黄又色的视频| 色综合天天综合网国产成人网| 久久成人片| 欧美日韩国产不卡视频| av天堂小说网| 不卡视频一区二区三区| 91人妻在线视频| 一级av| 欧美大胆a| 三级片亚洲无码| 亚洲综合社区| 午夜爽爽| 中文字幕69| 在线视频久| 亚洲熟妇无码| 欧美成人综合| 最新激情网站| 亚洲欧洲日韩综合| 日韩成人无码电影| 日韩免费AV| 91精彩视频| 国产三级片无码| 久久久成人视频| 东京热在线观看| www.有码99| 天天摸天天看| 永久免费黄色| 人人操人人干人人操| 精品91在线视频| 国产精品日韩无码| 日韩电影一区| 久久久女女女女999久久| 美女91网站色| 国产17c精品视频一二三区| 色播五月天| 精品一区二| 精品视频在线观看免费| 性猛交AAAA片免费看蜜桃视频| 99色逼| 91在线无码精品秘入口电车| 这里只有精品在线观看| 免费a在线观看| 怡春院日韩| 五月丁香电影| 精品国产AⅤ麻豆| AⅤ中文字幕在线免费观看| 四虎亚洲无码| 国产精品无码ThePorn| 婷婷五月天激情四射| 思思热这里只有精品| 中文字幕精品视频在线观看| 中文字幕-区二区三区四区视频中国| 一欧美日韩免费/看| 中国毛片视频| 久久丁香五月| 久久国产乱子伦精品免费女,网站| 欧美射图| 五月天激情小说网| 色婷婷丁香五月天| 作爱免费视频| 婷婷五月开心五月| 在线看黄片| 日韩在线一级片| 竹菊传媒一区二区三区| 99热香蕉| 人妻无码中文久久久久专区| 天天日天天干美女| www国产精品| 中文字幕乱伦日本| 日韩群交视频| 亚洲色图一区二区三区| 国产精品一麻了麻了| 豆花视频在线免费观看| 91网站免费观看| 日本天堂Tv视频在线观看| 日韩av免费在线| 国产色色色色| 亚洲精品视频在线观看网站 | 北条麻妃av在线播放| 在线免费看黄片| 日韩AV资源网| 波多野结衣无码高清视频| 91无码人妻一区二区三区| 日韩精品网址| 欧美日韩国产中文字幕| 国产色婷婷| 亚洲日逼网站| 成人做爰100部免费网站| 玩弄大乳乳妾高潮乳喷视频| 午夜精品久久久久久久91蜜桃| 亲子伦一区二区三区| 狠狠撸天天日| 日韩永久免费| 人人爽夜夜爽| 天天日天天日天天日| 搡老熟女-91Porn| 蜜臀久久99精品久久久电影| 美女少妇激情BBBB| 在线久草| 久久三级| 婷婷五月天色综合| 躁BBB躁BBB添BBBBBB| 天天精品无码| a√天堂中文在线8| 人人草人人爱| 国产精品成人免费| 日本黄色一级| 在线免费看AV片| 国产精品高| 无码人妻一区二区| 91亚瑟视频| 国产h视频| 欧美A视频在线观看| 免费69视频看片| 激情婷婷五月| 久久久久亚洲AV无码专区成人|