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

僅用250美元,Hugging Face技術主管手把手教你微調Llama 3

人工智能 新聞
大語言模型的微調一直是說起來容易做起來難的事兒。近日 Hugging Face 技術主管 Philipp Schmid 發表了一篇博客,詳細講解了如何利用 Hugging Face 上的庫和 fsdp 以及 Q-Lora 對大模型進行微調。

圖片 我們知道,Meta 推出的 Llama 3、Mistral AI 推出的 Mistral 和 Mixtral 模型以及 AI21 實驗室推出的 Jamba 等開源大語言模型已經成為 OpenAI 的競爭對手。

不過,大多數情況下,使用者需要根據自己的數據對這些開源模型進行微調,才能充分釋放模型的潛力。

雖然在單個 GPU 上使用 Q-Lora 對較小的大語言模型(如 Mistral)進行微調不是難事,但對像 Llama 3 70b 或 Mixtral 這樣的大模型的高效微調直到現在仍是一個難題。

因此,Hugging Face 技術主管 Philipp Schmid 介紹了如何使用 PyTorch FSDP 和 Q-Lora,并在 Hugging Face 的 TRL、Transformers、peft 和 datasets 等庫的幫助下,對 Llama 3 進行微調。除了 FSDP,作者還對 PyTorch 2.2 更新后的 Flash Attention v2 也進行了適配。

微調主要步驟如下:

  • 設置開發環境
  • 創建并加載數據集
  • 使用 PyTorch FSDP、Q-Lora 和 SDPA 微調大語言模型
  • 測試模型并進行推理

注:本文進行的實驗是在英偉達(NVIDIA)H100 和英偉達(NVIDIA)A10G GPU 上創建和驗證的。配置文件和代碼針對 4xA10G GPU 進行了優化,每個 GPU 均配備 24GB 內存。如果使用者有更多的算力,第 3 步提到的配置文件(yaml 文件)需要做相應的修改。

FSDP+Q-Lora 背景知識

基于一項由 Answer.AI、Q-Lora 創建者 Tim Dettmers 和 Hugging Face 共同參與的合作項目,作者對 Q-Lora 和 PyTorch FSDP(完全共享數據并行)所能提供的技術支持進行了總結。

FSDP 和 Q-Lora 的結合使用能讓使用者在 2 個消費級 GPU(24GB)上就能對 Llama 2 70b 或 Mixtral 8x7B 進行微調,細節可以參考下面文章。其中 Hugging Face 的 PEFT 庫對此有至關重要的作用。

文章地址:https://www.answer.ai/posts/2024-03-06-fsdp-qlora.html

PyTorch FSDP 是一種數據 / 模型并行技術,它可以跨 GPU 分割模型,減少內存需求,并能夠更有效地訓練更大的模型。Q-LoRA 是一種微調方法,它利用量化和低秩適配器來有效地減少計算需求和內存占用。

設置開發環境

第一步是安裝 Hugging Face Libraries 以及 Pyroch,包括 trl、transformers 和 datasets 等庫。trl 是建立在 transformers 和 datasets 基礎上的一個新庫,能讓對開源大語言模型進行微調、RLHF 和對齊變得更容易。

# Install Pytorch for FSDP and FA/SDPA
%pip install "torch==2.2.2" tensorboard
# Install Hugging Face libraries
%pip install  --upgrade "transformers==4.40.0" "datasets==2.18.0" "accelerate==0.29.3" "evaluate==0.4.1" "bitsandbytes==0.43.1" "huggingface_hub==0.22.2" "trl==0.8.6" "peft==0.10.0"

接下來,登錄 Hugging Face 獲取 Llama 3 70b 模型。

創建和加載數據集

環境設置完成后,我們就可以開始創建和準備數據集了。微調用的數據集應該包含使用者想要解決的任務的示例樣本。閱讀《如何在 2024 年使用 Hugging Face 微調 LLM》可以進一步了解如何創建數據集。

文章地址:https://www.philschmid.de/fine-tune-llms-in-2024-with-trl#3-create-and-prepare-the-dataset

作者使用了 HuggingFaceH4/no_robots 數據集,這是一個包含 10,000 條指令和樣本的高質量數據集,并且經過了高質量的數據標注。這些數據可用于有監督微調(SFT),使語言模型更好地遵循人類指令。no_robots 數據集以 OpenAI 發表的 InstructGPT 論文中描述的人類指令數據集為原型,并且主要由單句指令組成。

{"messages": [{"role": "system", "content": "You are..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
{"messages": [{"role": "system", "content": "You are..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
{"messages": [{"role": "system", "content": "You are..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}

no_robots 數據集中的 10,000 個樣本,被分為 9,500 個訓練樣本和 500 個測試樣本,其中有些樣本不包含 system 信息。作者使用 datasets 庫加載數據集,添加了缺失的 system 信息,并將它們保存到單獨的 json 文件中。示例代碼如下所示:

from datasets import load_dataset


# Convert dataset to OAI messages

system_message = """You are Llama, an AI assistant created by Philipp to be helpful and honest. Your knowledge spans a wide range of topics, allowing you to engage in substantive conversations and provide analysis on complex subjects."""



def create_conversation(sample):

    if sample["messages"][0]["role"] == "system":

        return sample
    else:

      sample["messages"] = [{"role": "system", "content": system_message}] + sample["messages"]

      return sample


# Load dataset from the hub

dataset = load_dataset("HuggingFaceH4/no_robots")



# Add system message to each conversation

columns_to_remove = list(dataset["train"].features)

columns_to_remove.remove("messages")

dataset = dataset.map(create_conversation, remove_columns=columns_to_remove,batched=False)



# Filter out conversations which are corrupted with wrong turns, keep which have even number of turns after adding system message

dataset["train"] = dataset["train"].filter(lambda x: len(x["messages"][1:]) % 2 == 0)

dataset["test"] = dataset["test"].filter(lambda x: len(x["messages"][1:]) % 2 == 0)



# save datasets to disk

dataset["train"].to_json("train_dataset.json", orient="records", force_ascii=False)

dataset["test"].to_json("test_dataset.json", orient="records", force_ascii=False)

使用 PyTorch FSDP、Q-Lora 和 SDPA 來微調 LLM

接下來使用 PyTorch FSDP、Q-Lora 和 SDPA 對大語言模型進行微調。作者是在分布式設備中運行模型,因此需要使用 torchrun 和 python 腳本啟動訓練。

作者編寫了 run_fsdp_qlora.py 腳本,其作用是從磁盤加載數據集、初始化模型和分詞器并開始模型訓練。腳本使用 trl 庫中的 SFTTrainer 來對模型進行微調。

SFTTrainer 能夠讓對開源大語言模型的有監督微調更加容易上手,具體來說有以下幾點:

格式化的數據集,包括格式化的多輪會話和指令(已使用) 只對完整的內容進行訓練,忽略只有 prompts 的情況(未使用) 打包數據集,提高訓練效率(已使用) 支持參數高效微調技術,包括 Q-LoRA(已使用) 為會話級任務微調初始化模型和分詞器(未使用,見下文)

注意:作者使用的是類似于 Anthropic/Vicuna 的聊天模板,設置了「用戶」和「助手」角色。這樣做是因為基礎 Llama 3 中的特殊分詞器(<|begin_of_text|> 及 <|reserved_special_token_XX|>)沒有經過訓練。

這意味著如果要在模板中使用這些分詞器,還需要對它們進行訓練,并更新嵌入層和 lm_head,對內存會產生額外的需求。如果使用者有更多的算力,可以修改 run_fsdp_qlora.py 腳本中的 LLAMA_3_CHAT_TEMPLATE 環境變量。

在配置參數方面,作者使用了新的 TrlParser 變量,它允許我們在 yaml 文件中提供超參數,或者通過明確地將參數傳遞給 CLI 來覆蓋配置文件中的參數,例如 —num_epochs 10。以下是在 4x A10G GPU 或 4x24GB GPU 上微調 Llama 3 70B 的配置文件。

%%writefile llama_3_70b_fsdp_qlora.yaml
# script parameters

model_id: "meta-llama/Meta-Llama-3-70b" # Hugging Face model id

dataset_path: "."                      # path to dataset

max_seq_len:  3072 # 2048              # max sequence length for model and packing of the dataset

# training parameters

output_dir: "./llama-3-70b-hf-no-robot" # Temporary output directory for model checkpoints

report_to: "tensorboard"               # report metrics to tensorboard

learning_rate: 0.0002                  # learning rate 2e-4

lr_scheduler_type: "constant"          # learning rate scheduler

num_train_epochs: 3                    # number of training epochs

per_device_train_batch_size: 1         # batch size per device during training

per_device_eval_batch_size: 1          # batch size for evaluation

gradient_accumulation_steps: 2         # number of steps before performing a backward/update pass

optim: adamw_torch                     # use torch adamw optimizer

logging_steps: 10                      # log every 10 steps

save_strategy: epoch                   # save checkpoint every epoch

evaluation_strategy: epoch             # evaluate every epoch

max_grad_norm: 0.3                     # max gradient norm

warmup_ratio: 0.03                     # warmup ratio

bf16: true                             # use bfloat16 precision

tf32: true                             # use tf32 precision

gradient_checkpointing: true           # use gradient checkpointing to save memory

# FSDP parameters: https://huggingface.co/docs/transformers/main/en/fsdp

fsdp: "full_shard auto_wrap offload" # remove offload if enough GPU memory

fsdp_config:

  backward_prefetch: "backward_pre"

  forward_prefetch: "false"

  use_orig_params: "false"

注意:訓練結束時,GPU 內存使用量會略有增加(約 10%),這是因為模型保存所帶來的開銷。所以使用時,請確保 GPU 上有足夠的內存來保存模型。

在啟動模型訓練階段,作者使用 torchrun 來更加靈活地運用樣本,并且易于被調整,就像 Amazon SageMaker 及 Google Cloud Vertex AI 一樣。

對于 torchrun 和 FSDP,作者需要對環境變量 ACCELERATE_USE_FSDP 和 FSDP_CPU_RAM_EFFICIENT_LOADING 進行設置,來告訴 transformers/accelerate 使用 FSDP 并以節省內存的方式加載模型。

注意:如果想不使用 CPU offloading 功能,需要更改 fsdp 的設置。這種操作只適用于內存大于 40GB 的 GPU。

本文使用以下命令啟動訓練:

!ACCELERATE_USE_FSDP=1 FSDP_CPU_RAM_EFFICIENT_LOADING=1 torchrun --nproc_per_node=4 ./scripts/run_fsdp_qlora.py --config llama_3_70b_fsdp_qlora.yaml

預期內存使用情況:

  • 使用 FSDP 進行全微調需要約 16 塊 80GB 內存的 GPU
  • FSDP+LoRA 需要約 8 塊 80GB 內存的 GPU
  • FSDP+Q-Lora 需要約 2 塊 40GB 內存的 GPU
  • FSDP+Q-Lora+CPU offloading 技術需要 4 塊 24GB 內存的 GPU,以及一塊具備 22 GB 內存的 GPU 和 127 GB 的 CPU RAM,序列長度為 3072、batch 大小為 1。

在 g5.12xlarge 服務器上,基于包含 1 萬個樣本的數據集,作者使用 Flash Attention 對 Llama 3 70B 進行 3 個 epoch 的訓練,總共需要 45 小時。每小時成本為 5.67 美元,總成本為 255.15 美元。這聽起來很貴,但可以讓你在較小的 GPU 資源上對 Llama 3 70B 進行微調。

如果我們將訓練擴展到 4x H100 GPU,訓練時間將縮短至大約 125 小時。如果假設 1 臺 H100 的成本為 5-10 美元 / 小時,那么總成本將在 25-50 美元之間。

我們需要在易用性和性能之間做出權衡。如果能獲得更多更好的計算資源,就能減少訓練時間和成本,但即使只有少量資源,也能對 Llama 3 70B 進行微調。對于 4x A10G GPU 而言,需要將模型加載到 CPU 上,這就降低了總體 flops,因此成本和性能會有所不同。

注意:在作者進行的評估和測試過程中,他注意到大約 40 個最大步長(將 80 個樣本堆疊為長度為三千的序列)就足以獲得初步結果。40 個步長的訓練時間約為 1 小時,成本約合 5 美元。

可選步驟:將 LoRA 的適配器融入原始模型

使用 QLoRA 時,作者只訓練適配器而不對整個模型做出修改。這意味著在訓練過程中保存模型時,只保存適配器權重,而不保存完整模型。

如果使用者想保存完整的模型,使其更容易與文本生成推理器一起使用,則可以使用 merge_and_unload 方法將適配器權重合并到模型權重中,然后使用 save_pretrained 方法保存模型。這將保存一個默認模型,可用于推理。

注意:CPU 內存需要大于 192GB。

#### COMMENT IN TO MERGE PEFT AND BASE MODEL ####

# from peft import AutoPeftModelForCausalLM



# # Load PEFT model on CPU

# model = AutoPeftModelForCausalLM.from_pretrained(

#     args.output_dir,

#     torch_dtype=torch.float16,

#     low_cpu_mem_usage=True,

# )

# # Merge LoRA and base model and save

# merged_model = model.merge_and_unload()

# merged_model.save_pretrained(args.output_dir,safe_serialization=True, max_shard_size="2GB")

模型測試和推理

訓練完成后,我們要對模型進行評估和測試。作者從原始數據集中加載不同的樣本,并手動評估模型。評估生成式人工智能模型并非易事,因為一個輸入可能有多個正確的輸出。閱讀《評估 LLMs 和 RAG,一個使用 Langchain 和 Hugging Face 的實用案例》可以了解到關于評估生成模型的相關內容。

文章地址:https://www.philschmid.de/evaluate-llm

import torch
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer


peft_model_id = "./llama-3-70b-hf-no-robot"



# Load Model with PEFT adapter

model = AutoPeftModelForCausalLM.from_pretrained(

  peft_model_id,

  torch_dtype=torch.float16,

  quantization_config= {"load_in_4bit": True},

  device_map="auto"

)

tokenizer = AutoTokenizer.from_pretrained(peft_model_id)

接下來加載測試數據集,嘗試生成指令。

from datasets import load_dataset
from random import randint

# Load our test dataset

eval_dataset = load_dataset("json", data_files="test_dataset.json", split="train")

rand_idx = randint(0, len(eval_dataset))

messages = eval_dataset[rand_idx]["messages"][:2]

# Test on sample

input_ids = tokenizer.apply_chat_template(messages,add_generation_prompt=True,return_tensors="pt").to(model.device)

outputs = model.generate(

    input_ids,

    max_new_tokens=512,

    eos_token_id= tokenizer.eos_token_id,

    do_sample=True,

    temperature=0.6,

    top_p=0.9,

)

response = outputs[0][input_ids.shape[-1]:]

print(f"**Query:**\n{eval_dataset[rand_idx]['messages'][1]['content']}\n")

print(f"**Original Answer:**\n{eval_dataset[rand_idx]['messages'][2]['content']}\n")

print(f"**Generated Answer:**\n{tokenizer.decode(response,skip_special_tokens=True)}")


# **Query:**

# How long was the Revolutionary War?

# **Original Answer:**

# The American Revolutionary War lasted just over seven years. The war started on April 19, 1775, and ended on September 3, 1783.

# **Generated Answer:**

# The Revolutionary War, also known as the American Revolution, was an 18th-century war fought between the Kingdom of Great Britain and the Thirteen Colonies. The war lasted from 1775 to 1783.

至此,主要流程就介紹完了,心動不如行動,趕緊從第一步開始操作吧。

責任編輯:張燕妮 來源: 機器之心
相關推薦

2011-05-03 15:59:00

黑盒打印機

2011-01-10 14:41:26

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2021-02-26 11:54:38

MyBatis 插件接口

2023-04-26 12:46:43

DockerSpringKubernetes

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統調用

2022-12-07 08:42:35

2020-04-14 10:20:12

MySQL數據庫死鎖

2020-07-09 08:59:52

if else模板Service

2009-11-09 14:57:37

WCF上傳文件

2024-10-16 11:40:47

2016-04-27 09:49:16

用戶模型產品總結

2011-03-25 12:45:49

Oracle SOA

2021-09-30 18:27:38

數據倉庫ETL

2009-04-22 09:17:19

LINQSQL基礎
點贊
收藏

51CTO技術棧公眾號

伊人久久大香线蕉综合四虎小说| 国产资源在线观看入口av| 蜜桃视频在线观看一区| 久久九九国产精品怡红院| 天天干天天曰天天操| 黄页网站大全在线免费观看| www国产成人| 成人国产在线激情| 日本一级黄色大片| 欧美系列电影免费观看| 日韩精品一区在线| 成人久久久久久久久| 91在线视频| 成人av免费观看| 国产精品久久久久久久久久三级 | 亚洲人成电影网| 911av视频| 日韩伦理三区| 一区二区三区在线影院| 欧美午夜精品久久久久免费视| 99热这里只有精品3| 久久黄色网页| 欧美激情中文网| 丁香花五月婷婷| 噜噜噜天天躁狠狠躁夜夜精品 | 国产视频在线观看视频| 久久亚洲不卡| 久久久免费电影| 最新黄色av网址| 国产成人手机高清在线观看网站| 日韩午夜在线影院| 亚洲欧美激情网| 午夜影院一区| 亚洲午夜久久久久久久久电影院| 制服诱惑一区| 高清av在线| 久久久久久久久久久电影| 国产精品对白刺激久久久| 亚洲一区二区三区高清视频| 免费精品视频| 91成品人片a无限观看| 黄色一级片在线免费观看| 91日韩在线| 在线视频欧美日韩| 熟女少妇内射日韩亚洲| 色综合www| 亚洲精品国产精品乱码不99按摩 | 亚洲 欧洲 日韩| 北岛玲一区二区三区| 久久久久久综合| 久久亚洲综合网| 秋霞网一区二区| 成人三级在线视频| 国产欧美一区二区在线播放| 午夜老司机福利| 国产自产2019最新不卡| 成人乱人伦精品视频在线观看| 精人妻无码一区二区三区| 美女视频一区免费观看| 55夜色66夜色国产精品视频| 日韩精品一区二区在线播放 | 黄色国产精品视频| 欧美a级在线观看| 天天综合天天做天天综合| 91免费黄视频| 日本午夜大片a在线观看| 欧美日韩亚洲视频一区| 国产女女做受ⅹxx高潮| 欧美一级大黄| 欧美丝袜丝交足nylons| av亚洲天堂网| 欧美区一区二区| 精品卡一卡二卡三卡四在线| 黄色av电影网站| 欧美日韩一区二区三区在线电影| 亚洲欧美精品中文字幕在线| 538精品视频| 91精品国产乱码久久久久久久| 久久久精品免费视频| 久久久久亚洲av片无码下载蜜桃 | 国产女女做受ⅹxx高潮| 国产精品videossex撒尿| 欧美日韩国产高清一区二区三区| 天天综合网久久| 日韩一级淫片| 亚洲精品动漫100p| 亚洲欧美va天堂人熟伦 | a在线欧美一区| 欧美日韩另类综合| 秋霞午夜在线观看| 亚洲一区中文在线| 久久精品香蕉视频| 精品视频在线播放一区二区三区 | 欧美性生交xxxxx久久久| 精品久久久久av| 香蕉久久一区| 亚洲国产欧美久久| 欧美视频久久久| 欧美成人精品| 午夜精品一区二区三区视频免费看| 国产成人在线播放视频| 日韩av午夜在线观看| 亚洲一区二区三| 婷婷在线观看视频| 中文字幕一区av| 成人毛片一区二区| 亚洲精品成a人ⅴ香蕉片| 精品国产99国产精品| 国产探花视频在线播放| 亚洲茄子视频| 国产在线精品一区免费香蕉| 无码国产精品一区二区免费16| 中文字幕国产一区二区| 少妇高潮毛片色欲ava片| 国产亚洲精彩久久| 日韩av一区在线观看| 日本高清不卡免费| 丝袜亚洲另类欧美综合| 俄罗斯精品一区二区三区| 成人午夜在线观看视频| 亚洲成人一区二区在线观看| 日韩爱爱小视频| 青青草这里只有精品| 久久精品美女视频网站 | 精品久久久中文| 亚洲综合伊人久久| 成人毛片在线| 啪一啪鲁一鲁2019在线视频| 性一交一乱一乱一视频| 国产精品久久福利| 91看片就是不一样| 精品午夜电影| 欧美高清性猛交| 91精品国自产| 日本一区二区不卡视频| 能在线观看的av| 精品福利一区| 久久久久久美女| 亚洲国产精品二区| 亚洲精品乱码久久久久久久久 | 精品视频—区二区三区免费| 超碰手机在线观看| 狠狠久久亚洲欧美| 一本久道久久综合狠狠爱亚洲精品| 黑人巨大亚洲一区二区久| 亚洲国产私拍精品国模在线观看| 久久久久黄色片| 国产精品69毛片高清亚洲| 色呦呦网站入口| 亚洲福利影视| 久久精品最新地址| 国产探花精品一区二区| 亚洲免费成人av| 亚洲精品一二三四| 欧美日本亚洲韩国国产| 亚洲自拍高清视频网站| 四虎影院观看视频在线观看| 欧美一区二区在线看| 欧美精品久久久久久久久46p| 久久国产福利国产秒拍| 爱爱爱视频网站| 激情不卡一区二区三区视频在线 | sm久久捆绑调教精品一区| 精品久久国产字幕高潮| 99精品视频99| 91蝌蚪porny九色| 久久精品99国产| 不卡在线一区二区| 91精品久久久久久久久久另类 | 欧美xxxx14xxxxx性爽| 国产乱淫a∨片免费视频| 一区二区三区在线视频观看| 99riav国产精品视频| 亚洲激情女人| 免费看成人片| 涩涩涩久久久成人精品| 欧美插天视频在线播放| 内射无码专区久久亚洲| 福利微拍一区二区| www亚洲色图| 国产在线精品免费| 给我免费播放片在线观看| 香蕉国产成人午夜av影院| 国产精品三级网站| 日本高清在线观看视频| 精品视频久久久久久久| 一区二区三区精| 亚洲大片精品永久免费| 91成人破解版| 国产在线精品一区二区三区不卡| 你真棒插曲来救救我在线观看| 伊人久久综合影院| 91青草视频久久| 人人草在线视频| 最新91在线视频| 黄色一级大片在线免费看国产一| 欧美视频一二三| fc2ppv在线播放| av在线这里只有精品| 午夜在线观看av| 悠悠资源网久久精品| 日韩国产高清一区| 香蕉免费一区二区三区在线观看 | 一区在线电影| 欧美a一欧美| 91久久精品国产91性色| 天堂av在线| 美女视频久久黄| 国产精品99999| 亚洲加勒比久久88色综合| 亚洲图片小说视频| 欧美性猛交xxxxx免费看| 国产性xxxx| 国产精品午夜在线观看| 在线观看国产免费视频| 国产在线日韩欧美| 欧美午夜aaaaaa免费视频| 一本色道久久综合一区| 国产精品久久久久9999爆乳| 色乱码一区二区三区网站| 久久久综合亚洲91久久98| 久久天堂久久| 国产精品综合久久久| 亚洲啊v在线| 久久久久久尹人网香蕉| 亚洲视频tv| 亚洲三级av在线| 天堂中文在线观看视频| 日韩三区在线观看| 国产一区二区女内射| 在线亚洲+欧美+日本专区| 五月婷婷开心网| 亚洲一区二区三区四区的| 日韩激情小视频| 国产精品美女久久福利网站| 国产aⅴ激情无码久久久无码| www..com久久爱| 大尺度在线观看| 国产.欧美.日韩| 日本成人在线免费| 国产一区二区三区久久悠悠色av| 日韩中文字幕a| 久久国产精品99久久人人澡| 亚洲一区在线不卡| 日韩黄色在线观看| 久草综合在线观看| 爽好久久久欧美精品| 久久精品99国产| 日韩国产欧美一区二区三区| 女人另类性混交zo| 久久久久久久波多野高潮日日| 欧美日韩黄色一级片| 亚洲激情女人| 日韩a在线播放| 石原莉奈在线亚洲二区| 亚洲乱码国产一区三区| 麻豆精品在线观看| 中文字幕永久视频| 久久激情五月婷婷| www.桃色.com| 成人性生交大片免费看中文网站| 9191在线视频| 99视频精品免费视频| a级在线观看视频| 久久久久久久久99精品| 男人舔女人下部高潮全视频| 国产精品女同一区二区三区| 国产精品精品软件男同| 一区二区在线观看视频 | 欧美影院精品一区| 亚洲天堂aaa| 欧美一二三四在线| 日韩一级片免费| 亚洲人成网站777色婷婷| 成年人在线视频免费观看| 久久久极品av| 2021天堂中文幕一二区在线观| 青草热久免费精品视频| 国产精品久久久久77777丨| 亚洲在线观看视频| 同性恋视频一区| 亚洲永久一区二区三区在线| 欧美日韩hd| 北条麻妃在线视频观看| 美腿丝袜亚洲综合| 蜜桃色一区二区三区| 久久色在线视频| 91久久久久久久久久久久久久| 夜夜爽夜夜爽精品视频| 在线观看日本视频| 这里只有精品99re| 日韩有码电影| 久久久精品欧美| a日韩av网址| 91系列在线观看| 伊人久久大香线蕉综合网站| 水蜜桃在线免费观看| 在线一区视频| 91精产国品一二三产区别沈先生| 99久久综合精品| 任我爽在线视频| 天天av天天翘天天综合网色鬼国产| 中文字幕一区二区人妻| 亚洲国产精品字幕| 超碰免费在线播放| 国产精品扒开腿做爽爽爽男男| 在这里有精品| 亚洲人成影视在线观看| 亚洲裸体俱乐部裸体舞表演av| 成年人三级黄色片| 久久亚洲精品小早川怜子| 国产一级久久久| 欧美三级资源在线| 欧美性孕妇孕交| 欧美—级高清免费播放| 在线高清欧美| 日韩在线观看电影完整版高清免费| 国产精品豆花视频| 亚洲欧美天堂在线| 国产精品女主播在线观看| 成人午夜视频在线播放| 精品裸体舞一区二区三区| 日本不卡三区| 国产精品色婷婷视频| 国产不卡av一区二区| 日韩欧美一区二| 成人激情校园春色| 激情小说中文字幕| 91精品国产色综合久久久蜜香臀| 韩国三级av在线免费观看| 欧美一二三视频| 日韩av资源网| 国产人妻777人伦精品hd| 国产91露脸合集magnet| 农村妇女精品一区二区| 欧美军同video69gay| chinese偷拍一区二区三区| 日本精品在线视频| 亚洲黄色录像| 北条麻妃在线观看| 久久久久国色av免费看影院| 天堂а√在线中文在线新版| 亚洲精品久久久久久久久久久久久 | av成人免费| 日韩黄色影视| 日韩电影免费在线看| 亚洲综合色一区| 色婷婷狠狠综合| 国产天堂在线| 国产精品一区二区三区免费视频| jvid福利在线一区二区| 中文字幕欧美人妻精品一区| 久久久久一区二区三区四区| 免费看污视频的网站| 一区二区欧美亚洲| 久久青草视频| 日本丰满大乳奶| 国产成人精品免费一区二区| 欧美日韩成人免费观看| 精品欧美黑人一区二区三区| 欧美78videosex性欧美| 国产日韩一区二区| 久久不射2019中文字幕| 欧洲美熟女乱又伦| 欧美日韩大陆在线| 日本三级韩国三级欧美三级| 国产尤物99| 久热精品在线| 国产3级在线观看| 欧美一级在线观看| 九色porny视频在线观看| 欧美日韩精品免费观看| 久久草av在线| 久久久夜色精品| 亚洲男人的天堂网站| 国产亚洲人成a在线v网站 | 伊人免费在线| 91麻豆蜜桃| 亚洲制服少妇| 少妇视频一区二区| 亚洲国产天堂久久综合| 免费在线成人激情电影| 国产日产欧美一区二区| 99久久综合99久久综合网站| 中国女人真人一级毛片| 色综合色综合久久综合频道88| 亚洲精品国模| 在线免费看污网站| 欧美网站在线观看| 免费av网站在线看| 久久99精品久久久久久久久久 | 精品电影在线观看| 大片免费播放在线视频| av一区二区三区在线观看| 亚洲综合好骚| 国产免费一区二区三区四区| 国产午夜精品久久久| 老司机亚洲精品一区二区| 999精品网站| 亚洲尤物在线视频观看|