精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费在线成人网| 亚洲丰满在线| 福利视频一二区| 涩涩视频在线观看| 精品国产导航| 亚洲激情图片小说视频| 国产丝袜一区二区三区| 18视频在线观看娇喘| 亚洲国产无线乱码在线观看| 久久精品国产亚洲夜色av网站 | 国产精品观看| 欧美精品久久一区| 午夜欧美性电影| 亚洲成熟少妇视频在线观看| 欧美a一欧美| 亚洲国产日产av| 2020国产精品久久精品不卡| 国产色无码精品视频国产| 99久久亚洲国产日韩美女 | 狠狠色噜噜狠狠色综合久| 日本一二三区在线观看| 免费观看成人www动漫视频| 欧美人伦禁忌dvd放荡欲情| 日韩欧美精品一区二区| av资源免费观看| 日韩成人一级| 欧美视频裸体精品| 蜜桃麻豆91| 久久久蜜桃一区二区| 自拍偷拍欧美| 欧美r级电影在线观看| 免费的av在线| 欧美成人一区二区视频| 国产精品porn| 精品电影一区二区| 丝袜人妻一区二区三区| 久久99精品久久久久久野外| 欧美综合视频| 欧美日韩在线直播| 中文字幕一区二区三区有限公司| 中文字幕人妻一区二区三区视频| 成人精品视频| 亚洲欧美国产va在线影院| 国产精品wwwww| av播放在线观看| 国产伦精品一区二区三区视频青涩| 欧美成人精品在线播放| 亚洲少妇18p| cao在线视频| 国产亚洲精久久久久久| 国产三级精品网站| 久草国产在线观看| 美女视频免费精品| 亚洲精品一区二区在线观看| 岛国大片在线免费观看| 中文字幕色婷婷在线视频| www久久精品| 91亚洲精品在线| 中文字幕在线观看免费视频| 国产亚洲欧美日韩在线观看一区二区 | 18video性欧美19sex高清| 亚洲精品一二三| 久久99精品久久久久久三级| 中文字幕乱码人妻无码久久| 日韩精品福利网| 欧美精品久久久久久久免费观看| 亚洲一级中文字幕| 中文字幕成人| 色综合天天综合色综合av| 国产麻豆电影在线观看| 四虎影院在线域名免费观看| 激情国产一区二区| 日韩av毛片网| 国产无遮挡aaa片爽爽| 日韩一区二区三区免费播放| 亚洲精品在线免费播放| 大尺度在线观看| 日韩成人一区| 色乱码一区二区三区88| 久草视频国产在线| a免费在线观看| 国产精品高潮呻吟| 美脚丝袜一区二区三区在线观看| 精品无人乱码| 96av麻豆蜜桃一区二区| 99国内精品久久久久久久软件| 老熟妇仑乱一区二区av| 欧美午夜a级限制福利片| 久久免费视频观看| 懂色av懂色av粉嫩av| 成人羞羞网站| 欧美老肥婆性猛交视频| 天天摸日日摸狠狠添| 日本欧美三级| 原创国产精品91| 亚洲AV无码国产成人久久| 成人久久久久| 欧美国产精品人人做人人爱| 永久免费未视频| 成人激情开心网| 欧美高清在线视频观看不卡| 亚洲 欧美 成人| 亚洲美女黄网| 久久艳片www.17c.com| 极品久久久久久久| 欧美久久99| 国产精品高潮呻吟久久av无限 | 亚洲自拍另类欧美丝袜| 中文字幕av网站| 国产aⅴ综合色| 99久久自偷自偷国产精品不卡| 女人偷人在线视频| 久久久久久久久99精品| 久久精品五月婷婷| 超碰超碰在线| 欧美在线综合视频| 亚洲 欧美 日韩系列| 裤袜国产欧美精品一区| 午夜精品成人在线视频| 欧美国产亚洲一区| 黑人巨大精品| 精品嫩草影院久久| 性爱在线免费视频| 一区二区在线| 国产精品v日韩精品| 日本免费网站在线观看| 99久久免费精品高清特色大片| 国产精品国产精品| 亚洲人在线观看视频| 91丨九色丨蝌蚪丨老版| 女同性恋一区二区| 久久av影院| 欧美一区二区大片| 在线xxxxx| 九九热线有精品视频99| 国产午夜精品全部视频在线播放| 中文字幕第24页| 亚洲欧美成人综合| 国产精品亚洲一区二区三区| 国产婷婷在线视频| 99在线视频精品| 真人做人试看60分钟免费| 亚洲ww精品| 播播国产欧美激情| 久久精品国产亚洲av无码娇色| 狠狠色丁香九九婷婷综合五月| 色涩成人影视在线播放| 偷拍中文亚洲欧美动漫| 欧美久久久久久蜜桃| 日韩中文字幕有码| 影音先锋日韩精品| 91精品久久久久久综合乱菊 | 久久久久无码国产精品| 99这里有精品| 精品卡一卡二| 在线看片福利| 国产亚洲xxx| 亚洲av人无码激艳猛片服务器| 久久久久久久精| 日本爱爱免费视频| 涩爱av色老久久精品偷偷鲁| 日韩精品视频中文在线观看 | 欧美天天综合| 国产精品亚洲网站| 国产超级va在线视频| 欧美一级欧美三级| 国产精品亚洲无码| 肉色丝袜一区二区| 宅男一区二区三区| 日韩激情精品| 97视频在线播放| 国产又黄又粗又长| 久久理论电影网| 国产美女作爱全过程免费视频| 在线能看的av网址| 国产一区二区免费| 国产乱人乱偷精品视频| 一区二区三区在线视频免费观看| 国产婷婷在线观看| 久久婷婷亚洲| 久久99精品国产一区二区三区| 欧美特大特白屁股xxxx| 精品精品国产国产自在线| 五月婷婷色丁香| 欧美激情中文不卡| 日韩精品视频久久| 成人自拍在线| 色噜噜国产精品视频一区二区| 一级免费在线观看| 中文成人av在线| 成人性做爰aaa片免费看不忠| 狠狠久久伊人| 国产精品久久97| 怡红院av在线| 日韩一区二区免费在线观看| 日韩av无码中文字幕| 成人精品一区二区三区四区| 婷婷五月色综合| 一区二区三区国产好| 欧美成人免费全部| 欧美新色视频| 色一情一伦一子一伦一区| 国产一区在线观看免费| 日本视频免费一区| 四虎永久国产精品| 高清欧美性猛交xxxx黑人猛| 国产精品av电影| 国产女主播在线写真| 欧美性xxxxxxxxx| 亚洲色图综合区| 久久精品视频网| 色哟哟网站在线观看| 欧美破处大片在线视频| 欧美亚州在线观看| 日韩欧美少妇| 一区二区欧美激情| 人妻无码中文字幕| 欧美一区午夜精品| 一级一级黄色片| 精品成人国产在线观看男人呻吟| 色婷婷免费视频| 日日摸夜夜添夜夜添国产精品| 欧美在线观看黄| 久久综合av| 日韩精品一区二区三区丰满| 极品国产人妖chinesets亚洲人妖| 91免费国产视频| 日本免费一区二区三区等视频| 日韩**中文字幕毛片| www欧美xxxx| 日韩精品在线观| 日本wwwxxxx| 精品国产一区二区三区久久久蜜月 | 亚洲不卡在线播放| 国产日韩欧美高清| 国产成人av一区二区三区不卡| 不卡一二三区首页| 四虎永久免费观看| 国产美女视频一区| 黄页免费在线观看视频| 亚洲伊人春色| 国产在线精品一区免费香蕉| 亚州一区二区三区| 日本成人在线视频网址| 欧美尤物美女在线| 欧美精品一区二区三区高清aⅴ | 国产一区二区三区高清在线观看| 三区在线视频| 亚洲欧美另类自拍| 噜噜噜在线观看播放视频| 亚洲美女在线视频| 理论视频在线| 日韩在线视频网站| 粗大黑人巨茎大战欧美成人| 久久国产精品偷| 国产盗摄一区二区| 97视频在线播放| 91精品韩国| 国产精品爽黄69| 亚洲午夜国产成人| 99www免费人成精品| 国产96在线亚洲| 蜜桃视频日韩| 日韩精品免费一区二区在线观看 | 69xxxx欧美| 久久视频在线直播| 国产在线xxx| 日本不卡免费高清视频| 成人在线观看免费视频| 91亚洲精品久久久| 超碰成人在线免费| 欧美精品尤物在线| 97人人精品| 国产一二三在线视频| 久久综合影音| 91亚洲一区二区| 日韩黄色小视频| 老司机午夜性大片| 久久精品一区| 日韩一区二区高清视频| 99精品视频免费观看视频| 91精品91久久久中77777老牛| 日韩av中文字幕一区二区| 九九久久久久久| 麻豆精品一区二区三区| 久久久久久久久久福利| 老司机精品视频导航| 能看毛片的网站| 99视频热这里只有精品免费| av电影网站在线观看| xfplay精品久久| 亚洲精品一区二区三区在线播放| 一级中文字幕一区二区| 精品无码一区二区三区蜜臀| 亚洲一区二区成人在线观看| 亚洲 欧美 变态 另类 综合| 亚洲国产欧美在线人成| 国产情侣呻吟对白高潮| 欧美成人vps| eeuss影院在线播放| 亚洲网站视频福利| а√天堂官网中文在线| 欧美中文字幕在线| 精品99re| 97人人模人人爽人人少妇| 深爱激情综合网| 国产美女作爱全过程免费视频| 日韩精品一二三四| v天堂中文在线| 亚洲精品国产精华液| 日韩国产亚洲欧美| 日韩精品极品视频| 国产后进白嫩翘臀在线观看视频| 成人福利网站在线观看11| 亚洲黄页网站| 欧美一级免费播放| 国产精品一级片| 国产在线免费看| 欧美午夜电影网| 国产三级伦理片| 国产亚洲美女精品久久久| 91av久久| 成人18视频| 在线精品视频在线观看高清| 污片在线免费看| 欧美韩日一区二区三区四区| 在线天堂中文字幕| 欧美精品一区二区三区蜜桃| 少女频道在线观看免费播放电视剧| 色综合久久精品亚洲国产| av成人亚洲| 日本不卡一区| 中文字幕人成人乱码| 亚洲一区日韩精品| 国产**成人网毛片九色| 老熟妻内射精品一区| 欧美日韩一区二区三区高清| 第一福利在线| 国产精品精品视频| 精品精品99| 欧美黄网在线观看| 国产在线看一区| 国产精品免费人成网站酒店| 欧美精品亚洲一区二区在线播放| aaa日本高清在线播放免费观看| 国产激情久久久| 经典一区二区| 国产性生交xxxxx免费| 久久精品欧美一区二区三区不卡| 一本一道无码中文字幕精品热| 亚洲男人天堂网站| 日韩成人动漫| 神马欧美一区二区| 美女脱光内衣内裤视频久久网站 | 在线精品视频小说1| 黄色影院在线播放| 国产精品福利网站| 日本大胆欧美| 亚洲综合在线一区二区| 亚洲激情av在线| 天堂网在线中文| x99av成人免费| 欧美高清一级片| 97视频在线免费| 久久久久久久久一| 亚洲天堂国产精品| 亚洲精品99久久久久中文字幕| 午夜在线视频| 欧美在线视频免费观看| 九色精品91| 91视频这里只有精品| 亚洲精品欧美激情| 熟妇人妻中文av无码| 日韩av免费网站| 亚洲精品国产成人影院| 手机在线看福利| 亚洲人成伊人成综合网小说| 无码人妻久久一区二区三区 | 久久爱一区二区| 日韩欧美视频在线| 18免费在线视频| 91在线看www| 亚洲综合二区| 免费成人深夜蜜桃视频| 精品久久久久av影院| 成人福利av| 欧美爱爱视频网站| 成人av网在线| 中文字幕理论片| 久久免费精品视频| 欧美亚洲国产精品久久| 欧美人与性动交α欧美精品| 日韩欧中文字幕| 3d玉蒲团在线观看| 老牛影视免费一区二区| 激情伊人五月天久久综合| 免费日韩一级片| 久久久精品久久| 精品国内自产拍在线观看视频| 久久无码专区国产精品s|