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

字節(jié)跳動模型大規(guī)模部署實戰(zhàn)

人工智能 深度學習
隨著 PyTorch/TensorFlow 框架的流行,深度學習模型訓練和在線推理完成了統(tǒng)一,開發(fā)者僅需要關注具體算法邏輯,調用框架的 Python API 完成訓練驗證過程即可,

一. 背景介紹

在字節(jié)跳動,基于深度學習的應用遍地開花,工程師關注模型效果的同時也需要關注線上服務一致性和性能,早期這通常需要算法專家和工程專家分工合作并緊密配合來完成,這種模式存在比較高的 diff 排查驗證等成本。

隨著 PyTorch/TensorFlow 框架的流行,深度學習模型訓練和在線推理完成了統(tǒng)一,開發(fā)者僅需要關注具體算法邏輯,調用框架的 Python API 完成訓練驗證過程即可,之后模型可以很方便的序列化導出,并由統(tǒng)一的高性能 C++ 引擎完成推理工作。提升了開發(fā)者訓練到部署的體驗。

然而,完整的服務通常還存在大量的預處理/后處理等業(yè)務邏輯,這類邏輯通常是把各種輸入經(jīng)過加工處理轉變?yōu)?Tensor,再輸入到模型,之后模型的輸出 Tensor 再加工成目標格式,一些典型的場景如下:

  • Bert
  • Resnet

圖片

圖片

我們的目標就是為以上端到端的過程,提供自動化且統(tǒng)一的訓練、推理方案,減輕人工開發(fā)推理過程、對齊 diff 等一系列問題,實現(xiàn)大規(guī)模的統(tǒng)一部署方案。

二. 核心問題

PyTorch/TensorFlow 等框架相對已經(jīng)解決了模型的訓練/推理統(tǒng)一的問題,因此模型計算本身不存在訓推一體的問題了(算子性能優(yōu)化不在本次討論范圍)。

核心要解決的問題就是:預處理和后處理需要提供高性能訓推一體的方案。

對于此類邏輯,TensorFlow 2.x 提供了 tf.function(還不完善),PyTorch 提供了 TorchScript,其無一例外都是選擇了原生 Python 語法子集。  但即使強大如此,仍然存在不可忽略的問題:

  • 性能:此方案大多基于虛擬機實現(xiàn),虛擬機方案靈活并且非常可控,但深度學習框架中的虛擬機大多通常性能不夠優(yōu)良。補充說明一下,框架早期都是為 Tensor 計算設計,數(shù)組計算每個算子成本很高,虛擬機的派發(fā)和調度成本可以忽略。但是,移植到程序語言編程層面開銷難以忽略,代碼寫多了就會成為性能瓶頸。據(jù)測試,TorchScript 解釋器性能只有 Python 的 1/5 左右,tf.function 性能更差一些。
  • 功能不全:事實上應用到真實場景中,我們仍然可以找出很多 tf.function/TorchScript 不支持的重要功能,比如:自定義的資源不能打包,只能序列化內置類型;字符串只能做 bytes 處理,中文等 unicode 會造成 diff;容器必須同構,不支持自定義類型等等...

再者,還有很多非深度學習任務,比如在自然語言處理中仍然有很多非深度學習的應用或者子任務,如序列標注,語言模型解碼,樹模型的人工特征構造等任務,這些通常具有更靈活的特征范式,但同時都沒有完整實現(xiàn)端到端的訓推一體方案,仍然有大量的開發(fā)以及正確性校驗工作。

為了解決上述問題,我們開發(fā)了一套基于編譯的預處理方案:MATXScript!

三. MATXScript

在深度學習算法開發(fā)中,開發(fā)者通常使用 Python 進行快速迭代和實驗,同時使用 C++ 開發(fā)高性能的線上服務,其中正確性校驗和服務開發(fā)都會成為較重負擔!

MatxScript(https://github.com/bytedance/matxscript) 是一個 Python 子語言的 AOT 編譯器,可以自動化將 Python 翻譯成 C++,并提供一鍵打包發(fā)布功能。使用 MATXScript 可以讓開發(fā)者快速進行模型迭代的同時以較低成本完成高性能服務的部署。

核心架構如下:

圖片

  • 最底層是純 C++/CUDA 的基礎庫,由高性能算子專家開發(fā)。
  • 在基礎庫之上,準守約定封裝出來 Python 的 庫,可以用在 training 過程中。
  • 需要 inferencing 時,利用 MATXScript 可以把 Python 代碼,翻譯成對等的 C++ 代碼,編譯成動態(tài)鏈接庫,加上模型及其他依賴的資源,一起打包發(fā)布即可。

其中,編譯器作用非常關鍵,其核心流程如下:

圖片

通過以上流程,用戶所編寫的預處理代碼,可以被編譯成 Pipeline 中的一個 JitOp,為了把前后處理和模型聯(lián)動,我們還開發(fā)了 tracing 系統(tǒng)(接口設計上參考了 PyTorch),架構如下:

圖片

基于 MATXScript,我們可以訓練和推理使用同一套代碼,大大降低了模型部署的成本。同時,架構和算法得到了解耦,算法同學完全使用 Python 工作即可,架構同學專注于編譯器開發(fā)及 Runtime 優(yōu)化,在字節(jié)跳動,此方案得到了大規(guī)模部署驗證!

四. 小試牛刀

此處以最簡單的英文文本預處理為例,展示一下 MATXScript 如何使用。

目標:把一段英文文本轉成 indexes

  1. 編寫一個基本的查字典的邏輯
class Text2Ids:
def __init__(self) -> None:
self.table: Dict[str, int] = {
"hello": 0,
"world": 1,
"[UNK]": 2,
}

def lookup(self, word: str)
return self.table.get(word, 2)

def __call__ (self, words: List[str])
return [self.lookup(w) for w in words]
  1. 編寫 Pipeline
import matx

class WorkFlow:
def __init__(self):
# 此處會進行代碼編譯,Python 代碼自動編譯封裝為 Callable 對象
self.text2ids = matx.script(Text2Ids)()

def process(self, texts):
ids = self.text2ids(texts)
return ids

# test
handler = WorkFlow()
print(handler.process("hello world unknown"))
# output: [0, 1, 2]
  1. Trace 導出到 磁盤
# dump
mod = matx.trace(handler.process, "hello world")
print(mod.run({"texts": "hello world"}))
mod.save('./my_dir')
# load
mod = matx.load('./my_dir', -1)
print(mod.run({"texts": "hello world"}))
  1. C++ 加載
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <matxscript/pipeline/tx_session.h>
using namespace ::matxscript::runtime;
int main()
{
// test case
std::unordered_map<std::string, RTValue> feed_dict;
feed_dict.emplace("texts", Unicode(U"hello world"));
std::vector<std::pair<std::string, RTValue>> result;
const char* module_path = "./my_dir";
const char* module_name = "model.spec.json";
{
// -1 mean cpu
auto sess = TXSession::Load(module_path, module_name, -1);
auto result = sess->Run(feed_dict);
for (auto& r : result) {
std::cout << "key: " << r.first << ", value: " << r.second << std::endl;
}
}
return 0;
}

完整的代碼見:https://github.com/bytedance/matxscript/tree/main/examples/text2ids

小結:以上是一個非常簡單的純 Python 實現(xiàn)的預處理邏輯,且能被一段通用的 C++ 代碼加載運行,下面我們結合模型展示一個實際的多模態(tài)端到端案例!

五. 多模態(tài)案例

此處以圖文多模態(tài)(Bert+Resnet)為例,模型使用 PyTorch 編寫,展示訓練和部署中實際的工作。

  1. 配置環(huán)境
    a. 配置 gcc/cuda 等基礎設施(通常是運維同學已經(jīng)搞定)
    b. 安裝 MATXScript 及基于此開發(fā)的基礎庫(text、vision等)
  2. 編寫模型代碼
    a. 此處省略,大家可以參考論文或其他開源實現(xiàn)自行搞定
  3. 編寫預處理代碼

    a. text

from typing import List, Dict, Tuple
import libcut
import matx
class Vocabulary:
...
def utf8_decoder(s: List[bytes]):
return [x.decode() for x in s]
class TextNDArrayBuilder:
...
class TextPipeline:
def __init__(self, mode: str = "eval"):
self.mode = mode
self.cut_engine = libcut.Cutter('/path/to/cut_models', ...)
self.vocab = matx.script(Vocabulary)('/path/to/vocab.txt')
self.decoder = matx.script(utf8_decoder)
self.input_builder = matx.script(TextNDArrayBuilder)(self.vocab)
def process(self, text: List[bytes]):
# List[bytes] 是對齊 C++ 的 vector<string>
text: List[str] = self.decoder(text)
words: List[List[str]] = self.cut_engine(text)
batch_ids: List[List[int]] = self.vocab(words)
input_ids, segment_ids, mask_ids = self.input_builder(batch_ids, 32)
if self.mode == "train":
return input_ids.torch(), segment_ids.torch(), mask_ids.torch()
return input_ids, segment_ids, mask_ids

    b. vision

from typing import List, Dict, Tuple
import matx
from matx import vision
class VisionPipeline:
def __init__(self,
device_id: int = 0,
mode: str = "eval",
image_size: int = 224,):
self.is_training = mode == 'train'
self.mode = mode
...
def process(self, image,):
if self.is_training:
decode_nds = self.random_crop_decode(image)
flip_nds = self.random_flip(decode_nds)
resize_nds = self.resize(flip_nds)
transpose_nd = self.transpose_norm(resize_nds, vision.SYNC)
else:
decode_nds = self.decode(image)
resize_nds = self.resize(decode_nds)
crop_nds = self.center_crop(resize_nds)
transpose_nd = self.transpose_norm(crop_nds, vision.SYNC)
if self.mode == "trace":
return transpose_nd
return transpose_nd.torch()
  1. 接入 DataLoader
    a. TextPipeline 可以當成一個正常的 Python Class 接入 Dataset 即可
    b. VisionPipeline 涉及到 GPU 預處理,更適合按 batch 進行處理,需要自己單獨構造一個 DataLoader(這里埋個點,之后會開源字節(jié)跳動內部基于多線程的 DataLoader)
  2. 加上模型代碼,開始訓練吧
  3. 導出端到端的 Inference Model
class MultimodalEvalPipeline:
def __init__(self):
self.text_pipe = TextPipeline(mode="eval", ...)
self.vision_pipe = VisionPipeline(mode="eval", ...)
self.torch_model = torch.jit.load('/path/to/multimodal.jit', map_locatinotallow='cuda:0')
self.tx_model_op = matx.script(self.torch_model, device=0)

def eval(self, texts: List[bytes], images: List[bytes])
input_ids, segment_ids, mask_ids = self.text_pipe.process(texts)
images = self.vision_pipe.process(images)
scores = self.tx_model_op(input_ids, segment_ids, mask_ids, images)
return scores
# examples
example_batch_size = 8
text_examples = ['hello, world'.encode()] * example_batch_size
with open('/path/image.jpg', 'rb') as f:
image_example = f.read()
image_examples = [image_example] * example_batch_size
# pipeline instance
pipe = MultimodalEvalPipeline(...)
mod = matx.trace(pipe.eval, text_examples, image_examples)
# test
print(mod.run({"texts": text_examples, "images": image_examples}))
# save
mod.save('/path/to/my_multimodal')

小結:經(jīng)過以上步驟,我們即可完成端到端的訓練&發(fā)布工作,且整個過程是純 Python 代碼完成的,可以完全由算法同學自己控制。當然,如果模型計算本身還有性能問題,也是可以在背后通過自動改圖優(yōu)化工作完成。

注:完整代碼示例見 https://github.com/bytedance/matxscript/tree/main/examples/e2e_multi_modal

六. 統(tǒng)一Server

在上個章節(jié),我們得到了一個算法同學發(fā)布的模型包,本章節(jié)論述如果用統(tǒng)一的服務進行加載和運行。

完整的 Server 包括:IDL 協(xié)議、Batching 策略、進/線程調度和排布、模型推理...

這里,我們只討論模型推理這塊,其他的都是可以按約定開發(fā)即可。我們以一個 main 函數(shù)來示例模型加載和運行的過程:

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <matxscript/pipeline/tx_session.h>
using namespace ::matxscript::runtime;
int main()
{
// test case
std::unordered_map<std::string, RTValue> feed_dict;
feed_dict.emplace("texts", List({String("hello world")}));
feed_dict.emplace("images", List({String("......")}));
std::vector<std::pair<std::string, RTValue>> result;
const char* module_path = "/path/to/my_multimodal";
const char* module_name = "model.spec.json";
{
// cuda:0
auto sess = TXSession::Load(module_path, module_name, 0);
auto result = sess->Run(feed_dict);
for (auto& r : result) {
std::cout << "key: " << r.first << ", value: " << r.second << std::endl;
}
}
return 0;
}

以上代碼就是最簡單的一個 C++ 加載多模態(tài)模型的案例,對 Server 開發(fā)的同學來說,只需進行簡單的抽象和約定,即可把上述代碼改造成一個統(tǒng)一的 C++ 模型服務框架。

七. 更多信息

我們是字節(jié)跳動-AML-機器學習系統(tǒng)團隊,致力于為公司提供統(tǒng)一的高性能訓推一體化框架,同時也會通過火山引擎機器學習平臺服務于合作企業(yè),火山引擎機器學習平臺預計 2023 年起提供 MATX 的相關支持,包括預置鏡像環(huán)境、常用場景的公開樣例、企業(yè)接入和使用過程中的技術保障等,可以達到訓練和推理場景低成本加速和一體化的效果。歡迎在 https://www.volcengine.com/product/ml-platform 詳細了解我們的產(chǎn)品。

責任編輯:龐桂玉 來源: 字節(jié)跳動技術團隊
相關推薦

2021-09-06 11:15:05

數(shù)據(jù)治理字節(jié)跳動埋點

2023-11-20 07:27:00

云原生Spark

2022-10-14 14:44:04

字節(jié)跳動ByteTechHTTP 框架

2024-11-26 19:29:35

2022-11-24 10:01:10

架構分布式

2025-09-10 09:59:52

2017-08-21 07:50:18

EasyStackOpenStack部署

2024-06-07 14:01:29

2023-12-01 17:42:10

2013-05-16 10:02:43

SaaS云計算部署

2013-05-22 09:40:57

大規(guī)模部署SaaSSaaS

2013-05-14 13:30:08

部署SaaS云計算

2022-06-02 16:58:06

Ray機器學習字節(jié)

2018-02-27 08:39:47

圖譜數(shù)據(jù)存儲

2022-07-07 11:00:09

美團模型實踐

2014-08-13 16:41:13

瞻博網(wǎng)絡OpenContraiSDN

2023-05-09 18:45:28

監(jiān)控監(jiān)視工具

2023-12-01 17:46:31

數(shù)據(jù)庫技術

2023-06-28 08:23:41

搜索語義模型
點贊
收藏

51CTO技術棧公眾號

天堂中文在线官网| 1024手机在线视频| 成人免费在线观看视频| 国产精品丝袜久久久久久app| 国产精品视频久久| 婷婷在线精品视频| 精品精品精品| 欧美日韩一区三区| www.av片| 精品美女在线观看视频在线观看| 国产精品自拍在线| 人妖精品videosex性欧美| 99久久99久久精品免费| 一区二区中文字幕在线观看| 欧美性猛交xxxxx免费看| 一区视频二区视频| 五十路在线视频| 久久国内精品视频| 91av视频在线观看| 99精品久久久久| av一区二区在线播放| 日韩欧美国产小视频| 五月丁香综合缴情六月小说| 色影视在线观看| 91在线视频播放| 91视频免费在线| 中文人妻av久久人妻18| 欧美午夜一区| 少妇高潮 亚洲精品| 在线观看日韩精品视频| 99精品在免费线中文字幕网站一区| 91高清在线观看| 欧美深夜福利视频| av在线导航| 国产精品福利一区二区三区| 欧美不卡三区| 午夜黄色小视频| 国产**成人网毛片九色| 成人免费网站在线看| 午夜一区二区三区四区| 国产欧美成人| 国外色69视频在线观看| 欧美日韩一级大片| 围产精品久久久久久久 | 久久综合九色综合久| 成人黄色国产精品网站大全在线免费观看 | 欧美成人三级在线观看| 欧美疯狂party性派对| 一区二区三区日韩在线| 强伦人妻一区二区三区| 亚洲精华一区二区三区| 精品亚洲一区二区三区在线观看 | 久久精品免费在线观看| 久久久7777| 亚洲 欧美 自拍偷拍| 99视频有精品| 精品一区二区不卡| 日本人妻熟妇久久久久久| 不卡一区中文字幕| 国产日韩一区欧美| 视频二区在线观看| 99re这里都是精品| 蜜桃传媒视频第一区入口在线看| 天堂在线资源网| 91浏览器在线视频| 欧美下载看逼逼| www 日韩| 亚洲欧美偷拍卡通变态| 欧美日韩dvd| heyzo高清在线| 欧美日韩国产一区在线| 日韩 欧美 高清| 免费在线成人激情电影| 欧美日本国产一区| 国产成人精品综合久久久久99| 欧美.com| 日韩激情av在线免费观看| 久久久久久久久久久久| 日韩欧美伦理| 欧美精品午夜视频| 少妇一级淫片免费放中国| 久久激情中文| 亚洲va久久久噜噜噜| 亚洲国产精品国自产拍久久| www.日韩大片| 日韩欧美亚洲在线| 最近中文字幕免费mv2018在线| 亚洲国产日韩av| 无码人妻丰满熟妇区五十路百度| 不卡亚洲精品| 精品免费一区二区三区| 久久精品国产亚洲av麻豆| 国产精品久久天天影视| 久久久欧美一区二区| 99成人精品视频| 国产精品主播直播| 欧美日韩三区四区| a在线免费观看| 欧美性色视频在线| 佐山爱在线视频| 中文有码一区| 欧美成人网在线| 日韩免费av网站| 国产激情视频一区二区三区欧美| 久久久久欧美| 婷婷色在线播放| 在线欧美日韩国产| 国产白袜脚足j棉袜在线观看| 国产成人高清| 国内精品久久久久久久久| 伊人久久一区二区| 99精品国产91久久久久久| eeuss中文| 日韩三区免费| 亚洲精品国产综合区久久久久久久| 国产sm调教视频| 亚洲电影在线| 91九色极品视频| 最新97超碰在线| 精品久久久久久久久国产字幕| 亚欧美在线观看| 私拍精品福利视频在线一区| 成年无码av片在线| 中文字幕一级片| 91亚洲男人天堂| www.夜夜爱| 亚洲欧美专区| 国产一区二区黄| 久久精品国产成人av| 国产99一区视频免费 | 亚洲第一区色| 91超碰在线免费观看| 黄色网页在线免费看| 91久久精品一区二区| 亚洲男人在线天堂| 在线日韩av| 国产精品一区二区三区在线观| 久久99精品久久| 欧美久久久久免费| 免费精品在线视频| 青青草国产精品97视觉盛宴| 明星裸体视频一区二区| 亚洲少妇视频| 亚洲精品美女久久久久| 日韩av女优在线观看| www.日本不卡| 老太脱裤让老头玩ⅹxxxx| 凹凸成人在线| 性色av一区二区三区| 黄色美女一级片| 亚洲高清视频的网址| 人妻激情偷乱频一区二区三区| 欧美日韩免费| 国产精品推荐精品| 国模精品视频| 日韩国产一区三区| 波多野结衣视频在线观看| 久久精品一二三| 色综合天天色综合| 四虎国产精品免费观看| 成人精品福利视频| 欧美巨大xxxx做受沙滩| 精品美女一区二区| 日韩毛片在线播放| 久久一二三国产| 亚洲少妇久久久| 四季av一区二区凹凸精品| 亚洲va久久久噜噜噜| 麻豆av在线播放| 亚洲久久久久久久久久| 亚洲欧美一二三区| 国产精品美女视频| 精品国产乱码久久久久久1区二区| 一区二区三区毛片免费| 国产精品theporn88| 伊人久久综合一区二区| 正在播放欧美一区| 亚洲AV无码成人片在线观看| 亚洲观看高清完整版在线观看| 一级性生活毛片| 激情欧美一区二区三区在线观看| 国产a级黄色大片| 亚洲视频分类| 国产欧美一区二区三区久久| 欧美大片黄色| 国产小视频国产精品| 国产一区二区在线视频观看| 亚洲一区二区三区四区的| 黄色正能量网站| 久久99热这里只有精品| 妞干网在线观看视频| 欧美精品一区二区久久| 99久久久久国产精品免费| 天堂av在线| 久久视频在线视频| 三区在线观看| 欧美一区二区国产| 黄色在线免费观看| 亚洲丝袜美腿综合| 中文字幕一区二区三区人妻不卡| 青青草97国产精品免费观看无弹窗版 | www.久久久久久久久久久| 亚洲小说欧美另类社区| 神马欧美一区二区| 成人性生交大片免费看96| 国产精品久久久久久久久久 | 九色网友自拍视频手机在线| 91精品在线麻豆| 特级毛片www| 亚洲综合图片区| 国产精品av久久久久久无| 国产成+人+日韩+欧美+亚洲| 日韩欧美黄色大片| 伊人久久成人| 成人免费看片视频在线观看| 久久最新网址| 国产一区二区高清不卡| 国产视频一区二| 国产精品久久久久久久9999| 欧美aa免费在线| 欧美极品少妇xxxxⅹ喷水 | 欧美成人专区| 91精品国自产在线观看| 亚洲狼人综合| 国产精品偷伦一区二区 | 91精品国产综合久久香蕉最新版 | 制服丝袜国产精品| 成人免费毛片视频| 婷婷开心激情综合| 伊人国产在线观看| 夜夜精品视频一区二区| 日韩在线观看视频一区二区| 国产精品私房写真福利视频| 丰腴饱满的极品熟妇| 99免费精品在线观看| 亚洲最大视频网| 国产精品一级黄| www.偷拍.com| 国产一区二区视频在线| 粉色视频免费看| 免费观看在线色综合| 欧美三级午夜理伦三级| 亚洲在线国产日韩欧美| 国产美女无遮挡网站| 在线亚洲一区| av黄色在线网站| 噜噜噜久久亚洲精品国产品小说| 欧美黑人经典片免费观看| 亚洲黑丝一区二区| 麻豆tv在线播放| aa国产精品| 无码无遮挡又大又爽又黄的视频| 久久三级视频| 福利在线一区二区三区| 日本va欧美va精品| 小泽玛利亚视频在线观看| 蜜臀av一区二区| 一级黄色在线播放| 国产自产视频一区二区三区| 日日夜夜精品视频免费观看| 国产高清亚洲一区| 国产国语老龄妇女a片| 99久久久精品| 人人妻人人藻人人爽欧美一区| 国产亚洲综合色| 中文字幕第69页| 亚洲最大成人综合| 日韩成人免费观看| 色丁香久综合在线久综合在线观看| 69亚洲精品久久久蜜桃小说| 欧美男女性生活在线直播观看| 欧美大片免费播放| 无遮挡动作视频在线观看免费入口| 在线日韩欧美视频| 免费观看在线黄色网| 欧美激情精品久久久久久黑人| www.色在线| 国产精品999| 久久9999免费视频| 国内一区二区三区在线视频| 国产成人黄色| 国产免费xxx| 一区二区三区导航| 男女污污的视频| 国产精一品亚洲二区在线视频| 国产在线不卡av| 亚洲国产精品精华液ab| 妺妺窝人体色www婷婷| 色国产精品一区在线观看| 国产乱人乱偷精品视频a人人澡| 亚洲成人网久久久| 最新97超碰在线| 97高清免费视频| 欧美videos粗暴| 精品免费国产| 国产精品成人一区二区不卡| 日韩av中文字幕第一页| 蜜臀av在线播放一区二区三区| 手机看片国产精品| 国产欧美精品区一区二区三区| 欧美三级免费看| 日本久久一区二区| 亚洲精品国产一区二| 最近2019年好看中文字幕视频| a√中文在线观看| 国产在线视频一区| 一本久久青青| 丁香色欲久久久久久综合网| 日韩不卡一区二区三区| 国产十八熟妇av成人一区| 中文字幕综合网| 无码人妻精品一区二区蜜桃色欲| 国内欧美视频一区二区| 国产视频在线观看一区| 婷婷激情图片久久| 国产精彩免费视频| www.视频一区| 久久久久久福利| 欧美调教femdomvk| 久久视频www| 性视频1819p久久| 91精品久久久久久综合五月天| 亚洲精品人成| 久久久人人人| 成人无码www在线看免费| 亚洲欧美视频在线观看| 中文字幕有码视频| 国产亚洲aⅴaaaaaa毛片| 国产乱码午夜在线视频| 国产成人一区二区三区免费看| 久久久国产精品| 一级黄色录像在线观看| 国产日产欧美一区二区视频| 欧美成人精品欧美一级乱黄| 日韩一区二区在线看| 国产区在线看| 91亚洲人电影| 久久久久久久久久久9不雅视频| 亚洲最大成人在线观看| 国产欧美一区二区精品婷婷| 精品久久久久久久久久久久久久久久久久| 亚洲精品mp4| 欧美黑人xx片| 国产日韩欧美综合精品 | 久久久久久久久久久福利| 成人高清视频在线观看| 国产精品99精品| 亚洲国产91精品在线观看| 爱搞国产精品| 精品免费二区三区三区高中清不卡| 99这里有精品| 伊人网在线视频观看| 日本综合字幕| 国产成人精品最新| 中文精品一区二区| 一级特黄性色生活片| 国产欧美日韩激情| 在线观看一二三区| xxx一区二区| 日韩精品久久久久久久软件91 | 精品福利电影| 最近中文字幕无免费| 欧美艳星brazzers| 免费黄色在线网站| 成人91免费视频| av不卡在线看| 波多野结衣一二三四区| 欧美精品免费视频| 男女在线观看视频| 欧美精彩一区二区三区| 日韩不卡在线观看日韩不卡视频| 国精产品一区一区二区三区mba| 欧美大片在线观看一区二区| 岛国av在线播放| 日本视频一区二区不卡| 久久成人精品无人区| 久久久综合久久久| 亚洲欧美激情精品一区二区| 全球中文成人在线| 国产片侵犯亲女视频播放| 2020国产成人综合网| 亚洲系列在线观看| 午夜精品蜜臀一区二区三区免费 | 色屁屁影院www国产高清麻豆| 在线精品高清中文字幕| 日本精品在线播放| 免费在线观看日韩视频| 亚洲欧美怡红院| 日本人妻丰满熟妇久久久久久| 国产精品久久久久aaaa九色| 一区二区三区在线电影| 国产艳俗歌舞表演hd| 91精品国产入口| 国产精欧美一区二区三区蓝颜男同| 一本一生久久a久久精品综合蜜| 懂色av一区二区三区免费看| 中文字幕一级片| 欧美日韩在线播放三区四区| 久久久久久久久毛片| 日韩成人在线播放|