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

用TFserving部署深度學習模型

開發 架構 深度學習
本文介紹了TFserving部署線上推理服務,從模型的轉換,部署啟動和調用推理,歡迎交流,希望對你有幫助。

1.什么是TFserving

當你訓好你的模型,需要提供給外部使用的時候,你就需要把模型部署到線上,并提供合適的接口給外部調用。你可能會考慮一些問題:

  •  用什么來部署
  •  怎么提供api接口
  •  多個模型GPU資源如何分配
  •  線上模型如何更新而服務不中斷

目前流行的深度學習框架Tensorflow和Pytorch, Pytorch官方并沒有提供合適的線上部署方案;Tensorflow則提供了TFserving方案來部署線上模型推理。另外,Model Server for Apache MXNet 為MXNet模型提供推理服務。

本文為TFServing的使用指南。如果你是pytorch或者MXNet模型,也可以通過ONNX轉成TFserving的模型,部署在TFServing上。

那什么是TFserving?

TFserving是Google 2017推出的線上推理服務;采用C/S架構,客戶端可通過gRPC和RESTfull API與模型服務進行通信。

TFServing的特點:

  •  支持模型版本控制和回滾:Manager會進行模型的版本的管理
  •  支持并發,實現高吞吐量
  •  開箱即用,并且可定制化
  •  支持多模型服務
  •  支持批處理
  •  支持熱更新:Source加載本地模型,通知Manager有新的模型需要加載,Manager檢查模型的版本,通知Source創建的Loader進行加載模型
  •  支持分布式模型

2.TFserving安裝

強烈建議采用docker方式安裝TFserving,安裝依賴docker和nvidia-docker(TFserving的gpu需要)

  •  docker 安裝 
  1. #安裝yum-utils工具和device-mapper相關依賴包  
  2. yum install -y yum-utils \  
  3. device-mapper-persistent-data \  
  4. lvm2  
  5. #添加docker-ce stable版本的倉庫  
  6. yum-config-manager \  
  7. --add-repo \  
  8. https://download.docker.com/linux/centos/docker-ce.repo  
  9. #更新yum緩存文件  
  10. yum makecache fast  
  11. #查看所有可安裝的docker-ce版本  
  12. yum list docker-ce --showduplicates | sort -r  
  13. # 安裝docker-ce  
  14. yum install docker-ce-17.12.1.ce-1.el7.centos  
  15. #允許開機啟動docker-ce服務  
  16. systemctl enable docker.service  
  17. #啟動Docker-ce服務  
  18. systemctl start docker  
  19. #運行測試容器hello-world  
  20. docker run --rm hello-world 
  •  nvidia-docker 安裝 
  1. # 安裝nvidia-docker2  
  2. yum install -y nvidia-docker2-2.0.3-1.docker17.12.1.ce  
  3. # 重啟docker服務  
  4. service docker restart 
  •  安裝TFserving 
  1. docker pull tensorflow/serving:latest-gpu  
  2. # 可以選擇其他版本如 docker pull tensorflow/serving:1.14.0-rc0-gpu 

注意:docker版本和nvidia-docker要匹配

  •  目前最新的nvidia-docker需要Docker為19.03 可參考官方https://github.com/NVIDIA/nvidia-docker
  •  nvidia-docker2 支持Docker版本低于19.03的其他版本(需>=1.12),現有服務器有18.09,1.17,1.13  https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(version-2.0)

3.TFserving使用說明

3.1 模型轉換

TFserving的模型需要轉換成TFserving的格式, 不支持通常的checkpoint和pb格式。

TFserving的模型包含一個.pb文件和variables目錄(可以為空),導出格式如下:. 

  1. ├── 1  
  2. │   ├── saved_model.pb  
  3. │   └── variables  
  4. ├── 2  
  5. │   ├── saved_model.pb  
  6. │   └── variables 

不同的深度學習框架的轉換路徑: 

  1. (1) pytorch(.pth)--> onnx(.onnx)--> tensorflow(.pb) --> TFserving  
  2. (2) keras(.h5)--> tensorflow(.pb) --> TFserving  
  3. (3) tensorflow(.pb) --> TFserving 

這里詳細介紹下pb轉換成TFserving模型 

  1. import tensorflow as tf  
  2. def create_graph(pb_file):  
  3.     """Creates a graph from saved GraphDef file and returns a saver."""  
  4.     # Creates graph from saved graph_def.pb.  
  5.     with tf.gfile.FastGFile(pb_file, 'rb') as f:  
  6.         graph_def = tf.GraphDef()  
  7.         graph_def.ParseFromString(f.read())  
  8.         _ = tf.import_graph_def(graph_def, name='' 
  9. def pb_to_tfserving(pb_file, export_path, pb_io_name=[], input_node_name='input'output_node_name='output'signature_name='default_tfserving'):  
  10.     # pb_io_name 為 pb模型輸入和輸出的節點名稱,  
  11.     # input_node_name為轉化后輸入名  
  12.     # output_node_name為轉化后輸出名  
  13.     # signature_name 為簽名  
  14.     create_graph(pb_file) 
  15.      # tensor_name_list = [tensor.name for tensor in tf.get_default_graph().as_graph_def().node]  
  16.     input_name = '%s:0' % pb_io_name[0]  
  17.     output_name = '%s:0' % pb_io_name[1]  
  18.     with tf.Session() as sess:  
  19.         in_tensor = sess.graph.get_tensor_by_name(input_name)  
  20.         out_tensor = sess.graph.get_tensor_by_name(output_name)  
  21.         builder = tf.saved_model.builder.SavedModelBuilder(export_path)  ## export_path導出路徑  
  22.         inputs = {input_node_name: tf.saved_model.utils.build_tensor_info(in_tensor)}    
  23.         outputs = {output_node_name: tf.saved_model.utils.build_tensor_info(out_tensor)}  
  24.         signature = tf.saved_model.signature_def_utils.build_signature_def(  
  25.             inputs, outputs, method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)  
  26.         builder.add_meta_graph_and_variables(  
  27.             sesssess=sess, tags=[tf.saved_model.tag_constants.SERVING],  
  28.             signature_def_map={signature_name: signature}, clear_devices=True)  ## signature_name為簽名,可自定義  
  29.         builder.save()  
  30. pb_model_path = 'test.pb'  
  31. pb_to_tfserving(pb_model_path, './1', pb_io_name=['input_1_1','output_1'],signature_name='your_model'

3.2 TFserving配置和啟動

模型導出后,同一個模型可以導出不同的版本(版本后數字),可以TFserving配置中指定模型和指定版本。TFserving的模型是通過模型名稱和簽名來唯一定位。TFserving 可以配置多個模型,充分利用GPU資源。

  •  模型配置 
  1. # models.config  
  2. model_config_list {  
  3.   config {  
  4.     name: 'your_model'  
  5.     base_path: '/models/your_model/'  
  6.     model_platform: 'tensorflow'  
  7. #     model_version_policy {  
  8. #       specific {  
  9. #         versions: 42  
  10. #         versions: 43  
  11. #       }  
  12. #     }  
  13. #     version_labels {  
  14. #       key: 'stable'  
  15. #       value: 43  
  16. #     }  
  17. #     version_labels {  
  18. #       key: 'canary'  
  19. #       value: 43  
  20. #     }  
  21.   }  
  22.   config {  
  23.     name: "mnist",  
  24.     base_path: "/models/mnist",  
  25.     model_platform: "tensorflow",  
  26.     model_version_policy: {  
  27.        specific: {  
  28.         versions: 1,  
  29.         versions: 2  
  30.        }  
  31.   }  
  32.  
  33. # 可以通過model_version_policy 進行版本的控制 
  •  啟動服務 
  1. # 建議把模型和配置文件放在docker外的本地路徑,如/home/tfserving/models, 通過-v 掛載到docker內部  
  2. # --model_config_file: 指定模型配置文件  
  3. # -e NVIDIA_VISIBLE_DEVICES=0: 指定GPU  
  4. # -p 指定端口映射 8500為gRpc 8501為restful api端口  
  5. # -t 為docker鏡像  
  6. nvidia-docker run  -it --privileged  -d -e NVIDIA_VISIBLE_DEVICES=0  -v /home/tfserving/models:/models  -p 8500:8500 -p 8501:8501 \  
  7.  -t tensorflow/serving:latest-gpu \  
  8. --model_config_file=/models/models.config  
  9. # /home/tfserving/models 結構  
  10. ├── models.config  
  11. └── your_model  
  12.     ├── 1  
  13.     │   ├── saved_model.pb  
  14.     │   └── variables  
  15.     └── 2  
  16.         ├── saved_model.pb  
  17.         └── variables  
  18. # test  
  19. curl http://192.168.0.3:8501/v1/models/your_model  
  20.  
  21.     "model_version_status": [  
  22.         {  
  23.             "version": "2",  
  24.             "state": "AVAILABLE",  
  25.             "status": {  
  26.             "error_code": "OK",  
  27.             "error_message": ""  
  28.             }  
  29.         }  
  30.     ]        
  31.  
  32. # 其他啟動方式  
  33. # 如果多個模型在不同的目錄,可以通過-mount 單獨加載  
  34. nvidia-docker run  -it --privileged  -d -e NVIDIA_VISIBLE_DEVICES=0 \  
  35. --mount type=bind,source=/home/tfserving/models/your_model,target=/models/your_model \  
  36. --mount type=bind,source=/home/tfserving/models/your_model/models.config,target=/models/models.config \  
  37. -p 8510:8500 -p 8501:8501 \  
  38. -t tensorflow/serving:latest-gpu \  
  39. --model_config_file=/models/models.config 

3.3 TFserving服務調用

客戶端可以通過gRpc和http方式調用TFserving服務模型,支持多種客戶端語言,這里提供python的調用方式; 調用都是通過模型名稱和簽名來唯一對應一個模型

  •  gRpc調用, gRpc的端口是8500 
  1.  
  2. # -*-coding:utf-8 -*-  
  3. import tensorflow as tf  
  4. from tensorflow_serving.apis import predict_pb2  
  5. from tensorflow_serving.apis import prediction_service_pb2_grpc  
  6. import grpc  
  7. import time  
  8. import numpy as np  
  9. import cv2 
  10. class YourModel(object):  
  11.     def __init__(self, socket):  
  12.         """ 
  13.         Args:  
  14.             socket: host and port of the tfserving, like 192.168.0.3:8500  
  15.         """  
  16.         self.socket = socket  
  17.         start = time.time()  
  18.         self.request, selfself.stub = self.__get_request()  
  19.         end = time.time()  
  20.         print('initialize cost time: ' + str(end - start) + ' s')  
  21.     def __get_request(self):  
  22.         channel = grpc.insecure_channel(self.socket, options=[('grpc.max_send_message_length', 1024 * 1024 * 1024),  
  23.                                                               ('grpc.max_receive_message_length', 1024 * 1024 * 1024)]) # 可設置大小  
  24.         stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)  
  25.         request = predict_pb2.PredictRequest()  
  26.         request.model_spec.name = "your_model"  # model name  
  27.         request.model_spec.signature_name = "your_model"  # model signature name  
  28.         return request, stub  
  29.     def run(self, image):  
  30.         """  
  31.         Args:  
  32.             image: the input image(rgb format)  
  33.         Returns: embedding is output of model  
  34.         """  
  35.         img = image[..., ::-1]   
  36.         self.request.inputs['input'].CopyFrom(tf.contrib.util.make_tensor_proto(img))  # images is input of model  
  37.         result = self.stub.Predict(self.request, 30.0)  
  38.         return tf.make_ndarray(result.outputs['output'])  
  39.     def run_file(self, image_file):  
  40.         """  
  41.         Args:  
  42.             image_file: the input image file  
  43.         Returns:  
  44.         """  
  45.         image = cv2.imread(image_file)  
  46.         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  
  47.         return self.run(image)  
  48. if __name__ == '__main__': 
  49.      model = YourModel('192.168.0.3:8500')  
  50.     test_file = './test.jpg'  
  51.     result = model.run_file(test_file)  
  52.     print(result)  
  53.     # [8.014745e-05 9.999199e-01] 
  •  restful api調用: restful端口是8501 
  1. import cv2  
  2. import requests  
  3. class SelfEncoder(json.JSONEncoder):  
  4.     def default(self, obj):  
  5.         if isinstance(obj, np.ndarray):  
  6.             return obj.tolist()  
  7.         elif isinstance(obj, np.floating):  
  8.             return float(obj)  
  9.         elif isinstance(obj, bytes):  
  10.             return str(obj, encoding='utf-8');  
  11.         return json.JSONEncoder.default(self, obj)  
  12. image_file = '/home/tfserving/test.jpg'  
  13. image = cv2.imread(image_file)  
  14. image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  
  15. img = image[..., ::-1]  
  16. input_data = {  
  17.     "signature_name": "your_model",  
  18.     "instances": img  
  19.  
  20. data = json.dumps(input_data, cls=SelfEncoderindent=None 
  21. result = requests.post("http://192.168.0.3:8501/v1/models/your_model:predict", datadata=data)  
  22. eval(result .content)  
  23. # {'predictions': [8.01474525e-05, 0.999919891]} 

5.總結

本文介紹了TFserving部署線上推理服務,從模型的轉換,部署啟動和調用推理,歡迎交流,希望對你有幫助。我們來回答下開篇提出的問題

  •  用什么來部署:當然是TFserving
  •  怎么提供api接口:TFserving有提供restful api接口,現實部署時會在前面再加一層如flask api
  •  多個模型GPU資源如何分配:TFserving支持部署多模型,通過配置
  •  線上模型如何更新而服務不中斷:TFserving支持模型的不同的版本,如your_model中1和2兩個版本,當你新增一個3模型時,TFserving會自動判斷,自動加載模型3為當前模型,不需要重啟 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2019-08-08 08:00:00

深度學習機器學習神經網絡

2022-03-28 18:59:02

DockerFlask深度學習

2022-05-10 10:19:04

AI深度學習模型

2018-11-07 09:00:00

機器學習模型Amazon Sage

2020-11-02 14:38:56

Java 深度學習模型

2021-09-02 08:02:50

深度學習Kubernetes集群管理

2019-01-23 11:12:42

機器學習機器模型預測工資

2023-11-19 23:36:50

2020-10-13 14:42:42

深度學習Windows人工智能

2017-05-27 14:00:06

深度學習人臉建模

2024-09-09 11:45:15

ONNX部署模型

2018-02-26 17:10:57

深度學習

2023-01-09 08:00:00

遷移學習機器學習數據集

2020-09-29 17:00:33

人工智能

2017-08-16 10:57:52

深度學習TensorFlowNLP

2017-10-18 09:48:13

深度學習TensorFlow入門篇

2021-02-03 13:56:09

KerasAPI深度學習

2017-05-08 14:42:36

2023-02-23 07:46:48

學習模型數據倉庫

2017-07-11 10:19:24

淺層模型機器學習優化算法
點贊
收藏

51CTO技術棧公眾號

91精品久久久久久久久久| 136福利第一导航国产在线| 久久精品女人| 一区二区三区天堂av | 精品无码黑人又粗又大又长| 91麻豆精品一二三区在线| 亚洲精选视频在线| 国产精品久久久久久久小唯西川| 在线观看免费av片| 91中文字幕精品永久在线| 日韩免费视频一区| 国产成人av影视| 污污视频在线| 国产欧美日韩在线视频| 成人性生交大片免费观看嘿嘿视频| 久久久精品99| 欧美大片aaaa| 亚洲欧美www| 国产老头和老头xxxx×| 大胆人体一区二区| 亚洲自拍偷拍麻豆| 丝袜足脚交91精品| 日韩一级在线播放| 精品亚洲欧美一区| 日本精品性网站在线观看| 欧美精品一区二区蜜桃| 成人直播大秀| 日韩av影视在线| 99精品视频免费版的特色功能| 香蕉视频亚洲一级| 婷婷亚洲久悠悠色悠在线播放| 在线免费一区| www 日韩| 久久毛片高清国产| 国产欧美日韩伦理| 国产黄色高清视频| 久久99精品国产麻豆不卡| 欧美中文在线字幕| 日韩精品一页| 成人一级片在线观看| 成人av番号网| 艳妇乳肉豪妇荡乳av无码福利 | 中国日韩欧美久久久久久久久| 99久久99精品| 国产激情久久| 精品视频在线免费看| 青青在线视频免费| 国产精品手机在线观看| 外国成人直播| 黑人巨大精品欧美一区二区三区| 8x8x华人在线| 免费看美女视频在线网站| 久久五月婷婷丁香社区| 精品国产一区二区三区麻豆免费观看完整版| 国产伦精品一区二区三区免.费 | 男人的天堂在线免费视频| 成人免费av在线| 国产精品美女xx| 免费av一级片| 99久久久免费精品国产一区二区| 国产精品一区二区三区在线观| 亚洲国产成人精品一区二区三区| 国产丶欧美丶日本不卡视频| wwwxx欧美| 欧美特级特黄aaaaaa在线看| av成人免费在线| 久久久影院一区二区三区| 欧美欧美欧美| 亚洲国产精品v| 在线视频不卡一区二区| √天堂8在线网| 亚洲大片精品永久免费| 国产最新免费视频| 亚洲成av在线| 在线播放国产精品二区一二区四区| 亚洲综合伊人久久| 国产精品x8x8一区二区| 日韩精品视频中文在线观看| 人妻少妇一区二区| 成人精品中文字幕| 久久久极品av| 精品视频一区二区在线观看| 性高湖久久久久久久久| 国产精品女主播视频| 免费一级a毛片| 国产一区欧美二区| 国产一区二区精品免费| 欧美视频xxxx| 国产伦精品一区二区三区千人斩| 亚洲人成在线观看网站高清| xxxxx99| 亚洲区综合中文字幕日日| 久久久久久成人精品| 日本五十熟hd丰满| 精品国精品国产尤物美女| 伊人再见免费在线观看高清版| 污污在线观看| 色综合色狠狠综合色| 亚洲黄色小视频在线观看| 免费精品一区二区三区在线观看| 亚洲黄色在线观看| 美国美女黄色片| 久久一区欧美| 国产精品美女久久久久av超清| 国产精品高潮呻吟av| 99久久婷婷国产精品综合| 3751色影院一区二区三区| 亚洲天堂一区二区在线观看| 久久动漫网址| 久久亚洲国产精品| 国产熟妇一区二区三区四区| 国产在线不卡一区| 欧美三日本三级少妇三99| 污污影院在线观看| 欧美日韩在线三区| 国产精品无码网站| 最新国产精品| 国产精品久久久亚洲| 蜜桃视频污在线观看| 国产精品成人午夜| 任你操这里只有精品| 粉嫩久久久久久久极品| 超碰97人人做人人爱少妇| 男人天堂视频网| 99视频一区二区| 国产日韩第一页| 欧美日韩国产网站| 亚洲精品一区在线观看香蕉| 久久精品一级片| 精久久久久久久久久久| 日韩.欧美.亚洲| 中文字幕高清在线播放| 精品欧美一区二区三区精品久久| 亚洲天堂网av在线| 免费精品视频在线| 奇米影视首页 狠狠色丁香婷婷久久综合| h视频在线免费观看| 欧美日韩亚洲不卡| 亚洲а∨天堂久久精品2021| 亚洲欧美日韩一区在线观看| 国产在线精品一区| av电影在线免费| 精品少妇一区二区三区视频免付费| 久久久久人妻一区精品色| 日韩综合在线视频| 日产精品高清视频免费| 日韩欧美一区二区三区在线观看 | 婷婷综合五月| 国产美女久久久| √新版天堂资源在线资源| 欧美在线观看18| 内射毛片内射国产夫妻| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久精品女同亚洲女同13| 韩国亚洲精品| 不卡一区二区三区视频| 欧美人与性动交α欧美精品济南到 | 亚洲小视频在线| 五月婷婷激情五月| 欧美国产日韩一二三区| www.久久91| 888久久久| 成人片在线免费看| sm久久捆绑调教精品一区| 亚洲国模精品一区| 久久久久久久久久久影院| 久久久亚洲精品石原莉奈| 亚洲一区二区蜜桃| 久久精品不卡| 99久久99久久精品国产片| www在线看| 亚洲美女喷白浆| 中文字幕乱码人妻无码久久| 日韩理论在线观看| 久久久久99人妻一区二区三区| 国产综合自拍| 欧美一区国产一区| 99久热在线精品视频观看| 欧美韩国理论所午夜片917电影| 日韩一级片免费| 欧美日韩一级黄| 免费在线视频一区二区| 91久色porny| 天天影视色综合| 亚洲三级国产| 亚洲精品久久区二区三区蜜桃臀| 精品视频一区二区三区| 68精品久久久久久欧美| 自拍视频在线播放| 精品久久久久久亚洲综合网 | 欧美黑人猛交的在线视频| 日韩精品在线免费观看| 一级做a爱片久久毛片| 亚洲大片一区二区三区| 国产jizz18女人高潮| 不卡的av网站| 五月激情五月婷婷| 国产欧美另类| 国产女人18毛片| 欧美猛男做受videos| www.久久草| 日本欧美在线| 青青久久av北条麻妃黑人| а√中文在线8| 亚洲视频第一页| 好吊色一区二区三区| 欧美日韩久久久一区| 中文字幕在线观看免费视频| 亚洲精品视频播放| 午夜一区二区三区四区| 一个色综合网站| 国产精品一区二区亚洲| 99国产精品国产精品毛片| 天天综合成人网| 国产欧美一区二区三区在线看蜜臀| 久久久久久久久久久久久久久国产 | 国产精品一区在线看| 国产成人日日夜夜| 三级4级全黄60分钟| 欧美a级片一区| 视频一区不卡| 久久黄色影视| 91日韩久久| 欧美videos粗暴| 国产成人一区二| 蜜臀av午夜精品久久| 国产黄色精品视频| 久久精品免费网站| 久久三级视频| 看av免费毛片手机播放| 亚洲日韩成人| 成人免费在线网| 欧美精品导航| 国产女人18毛片| 亚洲国产老妈| 在线视频不卡一区二区三区| 精品视频97| 日韩欧美第二区在线观看| 日韩高清成人在线| 国产精品视频500部| 日韩在线观看一区二区三区| 成人精品久久久| 中文字幕一区二区人妻视频| 精品欧美国产| av影片在线| 欧美黄色片视频| 四虎影院观看视频在线观看| 日韩在线欧美在线国产在线| 黄色在线视频观看网站| 国产丝袜一区二区| 欧洲亚洲精品视频| 亚洲精品一区二区三区不| 丝袜+亚洲+另类+欧美+变态| 国产精品国产三级国产aⅴ中文| 性生活免费观看视频| 精品国产乱码久久久久久1区2匹| 久久久久久久有限公司| 老司机aⅴ在线精品导航| 国产无套粉嫩白浆内谢| 久久女同性恋中文字幕| 日本一区二区在线免费观看| 9i在线看片成人免费| 屁屁影院国产第一页| 91日韩在线专区| 级毛片内射视频| 国产精品久久久久久久岛一牛影视| 99久久久无码国产精品不卡| 亚洲欧美日韩国产综合在线| 欧美做爰爽爽爽爽爽爽| 亚洲一区二区三区三| 黄网在线观看视频| 日本高清不卡一区| 亚洲一区中文字幕永久在线| 3atv在线一区二区三区| 亚洲老妇色熟女老太| 亚洲精品视频久久| 日本视频在线播放| 久久99久久亚洲国产| 蜜桃视频在线网站| 国产精品久久久久久影视| 免费在线成人网| 欧美日韩亚洲一区二区三区在线观看 | 亚洲精品一区二区三区蜜桃| 精品国产一区二区三区不卡| 亚洲AV第二区国产精品| 日韩成人伦理电影在线观看| 涩涩网站在线看| 成人免费毛片嘿嘿连载视频| wwwwww日本| 亚洲美女在线一区| 久久国产精品免费看| 欧美高清视频不卡网| 天天操天天干天天舔| 中文字幕亚洲欧美一区二区三区 | av蓝导航精品导航| 亚洲综合网站| 日韩av一区二区三区在线| 亚洲深深色噜噜狠狠爱网站| 欧洲黄色一级视频| 精品无码三级在线观看视频| 中国黄色a级片| **欧美大码日韩| caoporn国产| 国产日韩另类视频一区| 日本免费在线精品| 久久麻豆视频| 国产精品手机视频| 依依综合在线| 亚洲国产日韩一区| 成人在线播放视频| 欧美黄色小视频| jizzyou欧美16| 精品无人区一区二区三区竹菊| 91日韩免费| 黄色一级大片在线观看| 福利一区福利二区| 青青青视频在线播放| 欧美日韩性视频| 日本一本中文字幕| 日韩有码中文字幕在线| 亚洲一区三区| 国产精品美女久久久| 超碰中文字幕在线观看| 26uuu另类欧美| 久草视频在线免费看| 欧美精品免费视频| 国产日本在线视频| 午夜精品福利电影| 日韩精品视频一区二区三区| 国产激情视频一区| 亚洲伊人影院| 亚洲综合激情五月| 日韩一区精品字幕| 中文在线永久免费观看| 一区二区三区四区激情| 一区二区三区黄| 中文字幕无线精品亚洲乱码一区| 小黄鸭精品aⅴ导航网站入口| 久久久com| 一区二区三区导航| 国产日韩av高清| 色天天色综合| 国产亚洲欧美在线视频| 成人久久久精品乱码一区二区三区| 少妇aaaaa| 日韩欧美一级二级三级久久久| 成人影欧美片| 岛国视频一区| 黄色免费成人| xxxx黄色片| 欧美日韩免费区域视频在线观看| 三级av在线播放| 日韩免费不卡av| sdde在线播放一区二区| 四季av一区二区| 国产精品理伦片| av中文字幕免费在线观看| 欧美另类极品videosbest最新版本 | 国产精品久久中文| 大片网站久久| 中文字幕亚洲影院| 一区二区三区加勒比av| 国产91免费看| 26uuu另类亚洲欧美日本一| 要久久爱电视剧全集完整观看 | 国产乱码精品一区二区三| 91嫩草丨国产丨精品| 精品国产乱码久久久久久夜甘婷婷 | 亚洲成人精品女人久久久| 久久久女人电视剧免费播放下载| 欧美韩一区二区| 中文字幕第80页| 亚洲欧美一区二区久久 | 亚洲图片制服诱惑| 香蕉久久一区| 国产欧美日韩网站| 久久精品欧美日韩| 国产精品爽爽久久| 91国产在线精品| 成人羞羞视频播放网站| 四虎成人在线播放| 精品av在线播放| aaa在线观看| 国产精品区一区| 老司机午夜精品视频| 欧美日韩色视频| 日韩精品亚洲视频| 91麻豆精品| 欧美a在线视频| 亚洲欧洲av在线| 在线观看xxx| 成人黄色大片在线免费观看| 亚洲高清av| 免费黄色激情视频| 亚洲国产精品视频在线观看| 日韩毛片免费看| 国产男女无遮挡| 亚洲免费伊人电影| 国产中文字幕在线播放| 国产精品swag|