国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Paddle Inference Windows部署實戰(zhàn):CUDA/cuDNN/TensorRT版本匹配與C++推理

Paddle Inference Windows部署實戰(zhàn):CUDA/cuDNN/TensorRT版本匹配與C++推理 簡介本資源是面向Windows平臺AI推理開發(fā)者的Paddle Inference 3.0.0預編譯開發(fā)包專為需快速集成高性能深度學習推理能力的C工程而優(yōu)化適用于模型部署、邊緣計算及工業(yè)級服務開發(fā)等場景。壓縮包共623個文件涵蓋569個頭文件h/hpp用于接口調用與類型定義13個靜態(tài)庫lib和2個導出文件exp支撐鏈接構建5個核心DLL如paddle_inference.dll、mklml.dll、mkldnn.dll提供運行時推理引擎與數(shù)學加速能力另有proto與pb文件支持模型序列化解析整體體積達528.04MB。內容預覽顯示其深度整合Intel MKL含lapacke.h等數(shù)學接口、CUDA 11.8、cuDNN 8.6.0及TensorRT 8.5.1.7具備AVX指令集優(yōu)化與VS2019兼容性。目前已有132人下載學習開箱即用省去復雜環(huán)境編譯與依賴適配過程顯著降低Windows下PaddlePaddle C推理部署門檻。 拿到這個文件名的時候我第一反應是這是一臺Windows機器的Paddle Inference推理環(huán)境全家桶。x86-64-cuda11.8-cudnn8.6.0-trt8.5.1.7-mkl-avx-vs2019-paddle-inference-3.0.0.zip光看名字就能拆出七八個關鍵信息。如果你是做深度學習模型部署的或者剛接手一個C推理項目看到這種預編譯包時最怕的不是別的就是版本對不上、DLL缺一堆、跑起來直接崩。這篇文章就圍繞這個包把我實際部署Paddle Inference時踩過的坑、驗證過的步驟、調過的參數(shù)全部梳理一遍從環(huán)境匹配講到推理代碼再到TensorRT加速和常見報錯排查爭取讓你拿到包之后能一口氣跑通。先說這個包具體能干什么。Paddle Inference是PaddlePaddle的官方高性能推理引擎跟訓練框架解耦專門為上線部署優(yōu)化。這個zip是預編譯好的Windows x64版本編譯時用的是CUDA 11.8、cuDNN 8.6.0、TensorRT 8.5.1.7同時開啟了MKL數(shù)學庫和AVX指令集構建環(huán)境對應VS2019。什么意思呢就是說只要你的機器滿足這些依賴版本解壓這個包配置好環(huán)境變量和CMake工程就能直接做GPU加速的模型推理完全不需要自己從源碼編譯Paddle省下幾個小時甚至一整天的編譯時間。適合誰看剛入行做模型部署的工程師、需要在Windows上集成Paddle推理到C項目的同學以及被各種CUDA/cuDNN版本折磨過的老哥。1. 內容整體設計與拆解思路1.1 文件名里的版本矩陣代表什么先把這個文件名當密碼一樣逐段拆開看。x86-64平臺架構表示64位x86指令集幾乎所有現(xiàn)代Intel和AMD處理器都適用。如果你的機器是ARM架構比如部分Windows平板、Surface Pro X這個包就用不了。cuda11.8NVIDIA CUDA Toolkit的版本號。推理庫編譯時鏈接的是CUDA 11.8的運行時庫意味著你的機器上必須安裝CUDA 11.8或者更新但兼容的版本向下兼容方面一般驅動版本不能低于525.60.13具體看NVIDIA官方文檔。這里有個常見誤區(qū)CUDA有兩個概念一個是顯卡驅動自帶的運行時兼容層一個是獨立的Toolkit后面會細說。cudnn8.6.0NVIDIA cuDNN深度學習原語庫版本。CUDA負責通用并行計算cuDNN專門對卷積、池化、歸一化等神經(jīng)網(wǎng)絡核心算子做了深度優(yōu)化兩者配合才能發(fā)揮GPU的性能。trt8.5.1.7TensorRT版本。這是NVIDIA的高性能推理優(yōu)化器能把訓練好的模型做層融合、精度校準、動態(tài)shape優(yōu)化再生成推理引擎。Paddle Inference啟用TensorRT之后某些模型的推理延遲可以再降30%到50%。mklIntel Math Kernel Library數(shù)學核心庫。CPU上跑算子的時候會用MKL加速矩陣乘法、卷積等計算。Paddle Inference在CPU模式下如果沒有MKL性能會差挺多這個包默認帶上了。avxAdvanced Vector ExtensionsCPU指令集。AVX允許CPU單條指令處理多個浮點數(shù)據(jù)Paddle為這個指令集專門優(yōu)化過算子跑CPU推理時速度提升明顯。注意如果你的老舊CPU不支持AVX這個包會直接報非法指令錯誤。vs2019構建工具鏈版本Visual Studio 2019。這個主要影響你編譯C程序時MSVC運行時版本如果你用VS2015或VS2017去鏈接這個庫大概率會遇到運行時庫沖突或者符號解析失敗。paddle-inference-3.0.0Paddle Inference主版本號。3.0.0是相對較新的版本API設計和舊版有差異最明顯的是頭文件引用方式變了后面代碼部分會展示。zip打包格式Windows下直接用解壓工具解壓即可。一句話總結這個包是Paddle Inference團隊在特定軟硬件環(huán)境下編譯出來的產(chǎn)物想用好它你的開發(fā)機環(huán)境要跟這個版本矩陣對齊。1.2 CUDA、cuDNN、TensorRT三者的“鐵三角”關系很多人分不清CUDA、cuDNN、TensorRT的關系我打個比方。CUDA Toolkit相當于GPU的“操作系統(tǒng)API”你寫CUDA代碼、編譯GPU程序、管理顯存都靠它。顯卡驅動是“硬件驅動層”CUDA Toolkit是“用戶態(tài)開發(fā)庫”兩者有對應關系驅動包含一個兼容層只要驅動版本夠新就能運行較舊版本的CUDA Toolkit編譯出來的程序。cuDNN是構建在CUDA之上的“深度神經(jīng)網(wǎng)絡加速庫”它把卷積、LSTM等常用算子優(yōu)化到極致訓練和推理框架都會調用它。Paddle推理庫編譯時指定cuDNN 8.6.0運行時就會去找對應版本的cudnn64_8.dll。TensorRT則更上層它是個“推理引擎優(yōu)化器”。它不關心你怎么訓練模型只負責把訓練好的模型轉換成推理引擎通過層融合、kernel自動調優(yōu)、FP16/INT8量化等手段壓縮推理耗時。Paddle Inference跑GPU推理時要啟用TensorRT就必須在運行時加載TensorRT的動態(tài)庫nvinfer.dll等版本跟編譯時保持一致或兼容否則會報算子不匹配或版本不兼容的錯。這三者的匹配邏輯是驅動 CUDA Toolkit cuDNN版本可接受范圍 TensorRT版本可接受范圍。實際部署中最讓人頭疼的就是dll版本沖突老版本和新版本往往只差一兩個小版本號但行為卻截然不同。1.3 為什么需要預編譯的Paddle Inference包可能有人會問直接pip install paddlepaddle-gpu不就行了對于Python調用確實簡單但C部署場景完全不同。首先C推理需要的是靜態(tài)庫和頭文件pip包里雖然有但接口不穩(wěn)定、沒有頭文件、不方便鏈接。其次Paddle Inference源碼編譯在Windows下極其痛苦要裝Python、CMake、VS2019、CUDA、cuDNN、TensorRT還要處理各種依賴沖突編譯一次少說兩小時。預編譯包相當于把這些都辦好你的任務只是“解壓 配置 鏈接”。從工程視角看預編譯包還能保證推理行為的一致性你自己編譯的庫可能因為編譯選項不同算出的結果有細微差異但官方預編譯的版本是統(tǒng)一優(yōu)化過的批量部署時更可控。2. 環(huán)境配置從零準備CUDA 11.8、cuDNN和TensorRT2.1 Windows下安裝CUDA 11.8的完整步驟很多人在Windows裝CUDA時翻車主要原因是把“顯卡驅動”和“CUDA Toolkit”混為一談。實際上如果你只是要跑現(xiàn)成的Paddle推理包NVIDIA驅動里已經(jīng)包含了最低限度的CUDA運行時兼容庫但頭文件、nvcc編譯器、開發(fā)庫必須額外裝Toolkit。第一步檢查顯卡驅動。打開NVIDIA控制面板左下角“系統(tǒng)信息”里能看到驅動版本。CUDA 11.8要求驅動版本至少525.60.13如果驅動太老后面加載cuda runtime的時候會報找不到入口點或版本不兼容。驅動更新就直接去NVIDIA官網(wǎng)下載Game Ready或Studio驅動都可以開發(fā)機建議用Studio驅動穩(wěn)定性更好。第二步下載CUDA Toolkit 11.8。到NVIDIA官網(wǎng)的CUDA Toolkit Archive頁面選擇11.8版本W(wǎng)indows x86_64的exe安裝包大概2.8GB。安裝時選擇“自定義”把CUDA下的“Visual Studio Integration”選上其他組件默認。注意安裝路徑不要有中文和空格我習慣用默認的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8。第三步驗證安裝。打開命令行cmd或PowerShell輸入nvcc -V如果正常輸出版本信息說明Toolkit安裝成功。這里我遇到過一個問題裝完CUDA后命令行輸入nvcc提示不是內部或外部命令原因是沒有把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin加到系統(tǒng)環(huán)境變量PATH里。重新配置環(huán)境變量后重開命令行即可。還有一個非常常見的坑CUDA安裝的時候提示需要VS的某類組件如果你機器上裝的是VS2022而不是VS2019也沒關系CUDA 11.8對VS2022也有一定支持只是官方在VS2019下驗證得最充分。Paddle這個包標注VS2019不代表VS2022不能用只是建議盡量接近構建環(huán)境減少鏈接時的小問題。2.2 cuDNN 8.6.0下載與部署cuDNN的安裝比CUDA簡單本質上就是往CUDA目錄里放幾個文件。到NVIDIA cuDNN Archive頁面選擇Download cuDNN v8.6.0 for CUDA 11.xWindows版本下載得到一個zip壓縮包。解壓后里面有3個文件夾bin、include、lib。操作邏輯很直接把bin里的cudnn64_8.dll復制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bininclude里的cudnn.h復制到對應的include目錄lib里的cudnn.lib復制到lib\x64目錄。復制的時候記得管理員權限。驗證方式有兩個。第一查看C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin下是否存在cudnn64_8.dll第二在命令行執(zhí)行nvidia-smi如果驅動正常再執(zhí)行一個小的CUDA樣本程序比如bandwidthTest.exe能通過就說明CUDA環(huán)境沒問題cuDNN因為是動態(tài)庫只有真正跑深度學習推理時才會被調用。關于cuDNN我多說一句版本號中數(shù)字的兼容性比你想象中嚴格。比如cuDNN 8.6.0生成的動態(tài)庫名為cudnn64_8.dll其中“64_8”表示64位平臺、支持CUDA 11.x的API。如果你換成cudnn 8.9.x文件名可能會變成cudnn64_9.dll此時Paddle Inference編譯時鏈接的還是cudnn64_8這個導入庫運行時就會報找不到dll。所以不要隨便升級cuDNN。2.3 TensorRT 8.5.1.7的安裝與環(huán)境配置TensorRT的安裝也是解壓式。到NVIDIA TensorRT Archive頁面下載TensorRT 8.5.1.7 for Windows x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8的zip包解壓到一個你方便找到的路徑比如D:\TensorRT-8.5.1.7。TensorRT包里面包括bin目錄trtexec等工具、include目錄頭文件、lib目錄dll和導入庫、還有python包目錄。我們的核心任務是把lib目錄加入PATH或者把dll復制到安全位置。Paddle Inference運行時加載TensorRT是動態(tài)加載的它會在默認路徑和PATH中查找nvinfer.dll、nvonnxparser.dll等文件。所以最簡單的方法是把D:\TensorRT-8.5.1.7\lib加到系統(tǒng)環(huán)境變量PATH里并確保在PATH中的位置比較靠前。如果你在開發(fā)機上不想污染全局環(huán)境也可以在做CMake工程時通過cmake變量把TensorRT路徑傳進去運行exe前在腳本里加一下PATH。TensorRT還有個小坑它在運行時需要額外的CUDA驅動支持如果你用了精簡版驅動或者老驅動初始化TensorRT時會卡在加載cudart64_11.dll。所以再次確認驅動版本別低于525.60.13。2.4 驗證整套環(huán)境是否匹配在開始寫代碼之前先用最簡單的方式驗證一下環(huán)境。打開命令行依次執(zhí)行nvcc -V確認CUDA 11.8。where cudnn64_8.dll如果能找到路徑說明cuDNN在PATH里。where nvinfer.dll確認TensorRT核心庫可見。另外可以用TensorRT自帶的trtexec工具做一次快速自檢比如加載一個ONNX模型轉成engine能跑通說明TensorRT初始化正常D:\TensorRT-8.5.1.7\bin\trtexec.exe --onnxyour_model.onnx --saveEnginetest.engine如果這個命令報錯先別查Paddle大概率是TensorRT環(huán)境本身的問題早點發(fā)現(xiàn)早點排查。整個環(huán)境配置下來我的經(jīng)驗是能不改系統(tǒng)PATH就盡量不改所有的依賴庫通過拷貝dll到指定目錄的方式管理項目可控性更高。但既然做開發(fā)PATH方式最省事二選一即可。3. Paddle Inference 3.0.0的工程集成與推理實現(xiàn)3.1 解壓并理解預編譯包的目錄結構把下載的zip解壓后你會看到類似這樣的目錄結構paddle_inference/ ├── paddle/ │ ├── include/ │ │ ├── paddle_analysis_config.h │ │ ├── paddle_inference_api.h │ │ ├── paddle_pass_builder.h │ │ └── ... │ └── lib/ │ ├── paddle_inference.lib │ ├── paddle_inference.dll │ └── ... ├── third_party/ │ ├── install/ │ │ ├── cuda/ │ │ ├── cudnn/ │ │ ├── tensorrt/ │ │ ├── mkl/ │ │ └── ... │ └── ... ├── version.txt └── ...重點在于paddle/include和paddle/lib。頭文件放的是C API聲明庫文件放的是導入庫和動態(tài)庫。third_party目錄里通常會有Paddle依賴的第三方庫但實際運行時大多數(shù)還需要系統(tǒng)環(huán)境的CUDA、cuDNN等別指望這個目錄里的文件能替代你手動安裝的CUDA Toolit。version.txt里會寫明精確的構建信息建議打開看一眼確認跟你理解的版本一致。在Windows下用VS2019建工程時配置包含目錄為paddle/include庫目錄為paddle/lib并且把paddle_inference.dll、paddle2ONNX.dll等動態(tài)庫拷貝到exe輸出目錄或放到PATH可達的位置。否則編譯能過運行就報找不到paddle_inference.dll。3.2 最小CMake工程配置我習慣用CMake來管理Windows下的C工程比直接手寫.vcxproj方便。下面是我驗證過可用的CMakeLists.txt模板針對VS2019 Paddle Inference 3.0.0cmake_minimum_required(VERSION 3.16) project(paddle_infer_demo) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CONFIGURATION_TYPES Release CACHE STRING FORCE) # Paddle Inference路徑 set(PADDLE_INFER_DIR D:/paddle_inference CACHE PATH Path to paddle_inference) include_directories(${PADDLE_INFER_DIR}/paddle/include) link_directories(${PADDLE_INFER_DIR}/paddle/lib) # CUDA include_directories(C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.8/include) link_directories(C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.8/lib/x64) # TensorRT set(TENSORRT_DIR D:/TensorRT-8.5.1.7) include_directories(${TENSORRT_DIR}/include) link_directories(${TENSORRT_DIR}/lib) # MKL如果推理時想用CPU算子MKL路徑也要加 set(MKL_DIR C:/Program Files (x86)/Intel/oneAPI/mkl/latest) include_directories(${MKL_DIR}/include) link_directories(${MKL_DIR}/lib) add_executable(paddle_demo main.cpp) target_link_libraries(paddle_demo paddle_inference cudart nvinfer nvonnxparser # 釋放版本下Paddle還需要關注paddle2onnx依賴但鏈接paddle_inference時通常會自動帶 )這里要特別說明兩點。第一CMake的link_directories在Windows下有時不生效因為MSVC在鏈接時更依賴具體的庫文件路徑。遇到“找不到paddle_inference.lib”的情況最省事的辦法是在target_link_libraries里寫全路徑target_link_libraries(paddle_demo ${PADDLE_INFER_DIR}/paddle/lib/paddle_inference.lib )第二Release模式必須和Release模式匹配。Paddle的預編譯庫一般是Release版如果你用Debug配置去鏈接大概率會在運行時出現(xiàn)無法解析的外部符號或堆損壞因為MSVC的運行時庫/MD和/MTd不同。3.3 編寫一份能正常加載PIR模型的C推理代碼Paddle Inference 3.0.0的API和2.x有些變化核心頭文件是paddle_inference_api.h。下面是一個最基礎的單模型GPU推理示例流程是創(chuàng)建Config - 配置模型路徑 - 啟用GPU - 創(chuàng)建Predictor - 構造輸入 - Run - 讀取輸出。#include iostream #include vector #include paddle_inference_api.h int main() { // 1. 創(chuàng)建AnalysisConfig paddle_infer::Config config; // 假設模型是Paddle保存的靜態(tài)圖模型包含model.pdmodel和model.pdiparams config.SetModel(path/to/model.pdmodel, path/to/model.pdiparams); // 2. 開啟GPU推理 config.EnableUseGpu(1024, 0); // 參數(shù)1顯存預分配大小MB參數(shù)2GPU設備ID // 如果不想用GPU可以改用config.DisableGpu() // 3. 啟用TensorRT可選 config.EnableTensorRtEngine(1 30 /* workspace_size */, 1 /* batch_size */, 10 /* min_subgraph_size */, paddle_infer::PrecisionType::kFloat32, false /* use_static */, false /* use_calib_mode */); // 4. 開啟MKLDNN僅CPU模式下用GPU模式下此選項一般無效 // config.EnableMKLDNN(); // 5. 創(chuàng)建Predictor auto predictor paddle_infer::CreatePredictor(config); // 6. 獲取輸入輸出張量的名稱 auto input_names predictor-GetInputNames(); auto output_names predictor-GetOutputNames(); // 7. 構造輸入 auto input_tensor predictor-GetInputHandle(input_names[0]); // 假設輸入shape是 [1, 3, 224, 224]float32 std::vectorfloat input_data(1 * 3 * 224 * 224, 0.5f); input_tensor-Reshape({1, 3, 224, 224}); input_tensor-CopyFromCpu(input_data.data()); // 8. 推理 predictor-Run(); // 9. 獲取輸出 auto output_tensor predictor-GetOutputHandle(output_names[0]); std::vectorfloat output_data; output_tensor-CopyToCpu(output_data.data()); // 注意上面這種CopyToCpu方式存在隱患因為output_data沒有預分配空間。 // 更穩(wěn)妥的方式是先獲取shape再分配內存 // auto out_shape output_tensor-shape(); // int out_num std::accumulate(out_shape.begin(), out_shape.end(), 1, std::multipliesint()); // output_data.resize(out_num); // output_tensor-CopyToCpu(output_data.data()); return 0; }這段代碼有幾個細節(jié)容易踩坑。首先GetOutputHandle之后一定要先調用shape()獲取輸出維度再給vector分配空間最后CopyToCpu。如果直接CopyToCpu到一個空vector會觸發(fā)訪問越界或只拷出一部分數(shù)據(jù)。我在實際項目中遇到過輸出數(shù)據(jù)全0的情況排查半天發(fā)現(xiàn)是vector沒resizeCopyToCpu只寫了應該寫的長度但程序讀取越界了。其次Config.EnableUseGpu的第一個參數(shù)是顯存預分配大小這個值不是硬性限制Paddle會在需要時繼續(xù)申請但預分配越大運行中顯存碎片化越少越不容易因為顯存不足報錯。一般圖像分類模型給1024就夠檢測或分割模型給2048以上。另外Paddle的模型文件有兩種一種是舊版的__model__和params文件另一種是新版的.pdmodel和.pdiparams。3.0.0的接口對舊版也有兼容但我建議統(tǒng)一用新版格式保存模型時用paddle.jit.save。3.4 理解Paddle Inference的模型加載機制你可能會問模型文件到底放在哪程序怎么知道網(wǎng)絡結構這其實是“靜態(tài)圖”和“動態(tài)圖”的問題。訓練時用的是動態(tài)圖方便調試保存推理模型時用的是靜態(tài)圖把計算邏輯固化下來。.pdmodel文件就是序列化后的靜態(tài)計算圖包含所有算子和權重.pdiparams是權重文件。Paddle Inference加載模型時會做一系列圖優(yōu)化比如算子融合、常量折疊這些優(yōu)化由一系列pass組成。你可以通過config.SwitchIrOptimization(true)或false來開啟或關閉。我建議默認開啟尤其是在GPU TensorRT模式下圖優(yōu)化對性能影響很大。有時你會在日志里看到類似“I1125 09:00:01.123456 12345 analysis_predictor.cc:99] Optimize to PaddlePredictor...”的信息這說明圖優(yōu)化生效了。如果模型加載后推理結果不對可以試著SwitchIrOptimization(false)跑一遍對比結果看是不是優(yōu)化pass引入的問題。4. 實操過程與核心環(huán)節(jié)實現(xiàn)4.1 用C跑通一個圖像分類模型的全流程實錄為了減少變量我用PaddleClas里的MobileNetV3作為示例模型流程如下。第一準備模型。如果你手頭沒有Paddle模型可以用一行Python代碼導出一個示例模型import paddle import paddle.vision.models as models model models.mobilenet_v3_small(num_classes1000) model.eval() # 構造一個示例輸入用于固定輸入shape input_spec [paddle.static.InputSpec(shape[-1, 3, 224, 224], dtypefloat32, nameinput)] paddle.jit.save(model, mobilenetv3, input_specinput_spec, output_specNone)這樣會生成mobilenetv3.pdmodel和mobilenetv3.pdiparams兩個文件。第二把模型文件放好。我在D盤建了一個項目目錄結構是D:\paddle_demo\ ├── CMakeLists.txt ├── main.cpp ├── models\ │ ├── mobilenetv3.pdmodel │ └── mobilenetv3.pdiparams └── build\第三編譯工程。在VS2019的“x64 Native Tools Command Prompt”里執(zhí)行cd D:\paddle_demo mkdir build cd build cmake .. -G Visual Studio 16 2019 -A x64 -DPADDLE_INFER_DIRD:/paddle_inference cmake --build . --config Release編譯成功后在build\Release目錄下會生成paddle_demo.exe。執(zhí)行前確保paddle_inference.dll、cudnn64_8.dll、nvinfer.dll等動態(tài)庫都能被找到最保險的做法是寫一個bat腳本把這些dll全部復制到exe同目錄下或者啟動前臨時設置PATH。第四運行。程序跑起來后觀察輸出日志如果能看到Paddle版本信息和模型加載日志基本就通了。遇到問題時先看日志尾部錯誤碼Paddle的錯誤碼通常帶有EROR或FATAL字樣直接定位。4.2 CPU推理與MKLDNN的配置細節(jié)GPU在大多數(shù)服務器上都有但開發(fā)調試階段CPU推理反而更常用。Paddle Inference在x86平臺上開啟MKLDNN即oneDNN前身是MKL-DNN后CPU算子的性能提升非常明顯尤其是卷積和矩陣乘。開啟方式非常簡單config.EnableMKLDNN(); config.SetCpuMathLibraryNumThreads(8);SetCpuMathLibraryNumThreads用于設置CPU線程數(shù)默認是物理核心數(shù)。這個值不是越大越好因為線程切換和內存帶寬都會成為瓶頸我實測8線程左右對大部分模型性價比最高。多路CPU的服務器可能會更復雜建議按模型benchmark去搜一下最佳線程數(shù)。MKLDNN模式下Paddle會自動把部分算子替換為oneDNN實現(xiàn)圖優(yōu)化中也會多做一層算子融合。還有一個附加開關是EnableMKLDNNQuantizer用于INT8量化但一般需要校準數(shù)據(jù)集工程上用得少。4.3 TensorRT加速的完整開啟方式與參數(shù)選擇TensorRT是GPU推理的核心加速手段。在上面示例代碼里我用了EnableTensorRtEngine但這里有幾個參數(shù)值得單獨展開。第一個參數(shù)workspace_size單位是字節(jié)它表示TensorRT允許使用的顯存上限。設置太大可能會因為顯存不足導致TensorRT初始化失敗設置太小TensorRT因為無法執(zhí)行某些優(yōu)化策略性能會打折扣。我的習慣是把值設為顯存大小的三分之一到二分之一比如8GB顯存就設1GB到2GB左移30位是1GB。第二個參數(shù)batch_size這是“最優(yōu)batch數(shù)”等于1表示主要優(yōu)化batch1的推理。如果你的業(yè)務并發(fā)batch是固定的比如batch8這里最好設置為8TensorRT會依據(jù)這個size做kernel選擇。第三個參數(shù)min_subgraph_size這是子圖融合的最小節(jié)點數(shù)。Paddle會把支持TensorRT的算子組合成子圖子圖內的算子在TensorRT上執(zhí)行子圖外的算子留在Paddle上。min_subgraph_size太小時一個單獨的算子也會被調去TensorRT性能反而下降因為大量小算子會有額外傳輸開銷太大會導致TensorRT覆蓋的算子太少加速效果不明顯。官方默認值一般在3到5實踐下來10左右比較均衡。PrecisionType可以選擇kFloat32、kHalf、kInt8。如果對精度要求較高比如醫(yī)療圖像用kFloat32對性能敏感但精度容忍度還行用kHalf也就是FP16。kInt8需要額外校準數(shù)據(jù)前向inference時還需要在use_calib_mode參數(shù)設為true否則可能報錯。另外TensorRT支持序列化engine文件即靜態(tài)engine可以避免每次啟動都重新構建engine。Paddle里對應的是config.EnableTensorRtEngine時設置use_statictrue這樣會把優(yōu)化后的engine緩存到本地文件下次啟動直接加載。這個緩存跟模型、輸入shape、TensorRT版本、顯卡型號都強相關換環(huán)境或改shape之后一定要刪除緩存否則會報“inconsistency”錯誤。4.4 動態(tài)Shape場景下的TensorRT配置很多實際部署場景比如檢測模型的輸入shape是動態(tài)的例如一張圖可以是大是小。TensorRT對動態(tài)shape支持得比靜態(tài)shape復雜需要在配置時顯式指定三個維度范圍min_shape、opt_shape、max_shape。Paddle Inference的接口是config.EnableTensorRtEngine(workspace_size, max_batch_size, min_subgraph_size, precision, use_static, use_calib_mode); config.SetTRTDynamicShapeInfo(min_input_shape, max_input_shape, opt_input_shape, disable_trt_plugin_fp16);其中min_input_shape、opt_input_shape、max_input_shape都是mapkey是輸入張量名value是對應shape。舉個栗子一個[None, 3, None, None]的輸入std::mapstd::string, std::vectorint min_shape {{input, {1, 3, 32, 32}}}; std::mapstd::string, std::vectorint opt_shape {{input, {1, 3, 448, 448}}}; std::mapstd::string, std::vectorint max_shape {{input, {1, 3, 960, 960}}};這個配置決定了TensorRT在運行時能接受的輸入范圍。如果輸入超出了max_shape直接會報維度錯誤如果輸入在min和max之間TensorRT會嘗試在opt_shape附近做優(yōu)化所以opt值要盡量接近你的真實輸入尺寸分布中心。動態(tài)shape還帶來一個隱性風險子圖劃分策略在不同shape下可能不同導致同一個算子有時在TensorRT里、有時在Paddle里執(zhí)行表現(xiàn)出的性能差異較大。所以線上服務如果輸入尺寸波動很大建議還是固定到幾個離散的尺寸規(guī)格比如通過resize統(tǒng)一到448x448或960x960穩(wěn)定性和性能都更好。5. 常見問題與排查技巧實錄5.1 常見錯誤速查表我把實際部署中遇到的錯誤整理成一張表方便大家對照排查。錯誤現(xiàn)象可能原因解決方案運行時提示找不到paddle_inference.dll動態(tài)庫路徑未加入PATH把paddle/lib加到PATH或拷貝dll到exe目錄提示找不到cudnn64_8.dllcuDNN未安裝或版本不匹配檢查bin目錄下是否存在cudnn64_8.dll復制到系統(tǒng)PATH初始化GPU時卡死或報cudaErrorInsufficientDriver顯卡驅動版本過低更新驅動至525.60.13以上編譯時無法解析paddle::AnalysisConfig鏈接庫時找不到paddle_inference.lib檢查CMake鏈接的lib路徑是否寫對用絕對路徑最穩(wěn)運行時報非法指令Illegal instructionCPU不支持AVX指令集換成支持AVX的機器或下載noavx版本TensorRT engine初始化失敗TensorRT DLL版本不匹配確認nvinfer.dll版本為8.5.1.x且CUDA版本是11.8推理結果全是0或NaNvector未正確分配空間或輸入數(shù)據(jù)異常檢查輸出tensor的shape分配空間后再CopyToCpu顯存不足CUDA out of memory顯存被其他進程占用或workspace_size過大減小EnableUseGpu的預分配或關閉其他GPU進程日志中出現(xiàn)算子不支持TensorRT當前模型某些算子無法被TensorRT識別調大min_subgraph_size讓不支持的算子留在Paddle里執(zhí)行注意這張表只覆蓋了最常見的問題。實際上Windows環(huán)境的問題千奇百怪比如殺毒軟件刪dll、動態(tài)庫搜索路徑失效、顯卡驅動被系統(tǒng)更新覆蓋等等遇到問題時先冷靜逐層排查。5.2 DLL加載順序的坑與解決方案Windows加載動態(tài)庫的順序是exe所在目錄 - 系統(tǒng)目錄 - system32 - PATH環(huán)境變量。這帶來一個問題如果系統(tǒng)里殘留了舊版本的cuda DLL或cudnn DLLPaddle可能會加載到錯誤的版本導致莫名其妙的行為。我遇到過的一個典型案例機器上裝了Anacondaconda環(huán)境里有自己的一套cudnn加上Paddle的third_party目錄里也有一份dll還有系統(tǒng)裝的CUDA 11.8三份dll一起出現(xiàn)程序運行時根本不知道加載了哪一份。解決方法是在啟動exe的bat腳本里顯式把Paddle依賴的DLL目錄放到PATH最前面同時把conda的Library\bin挪到后面。更激進的做法是把工程需要的dll全部拷貝到exe目錄做到一個目錄全含。另外TeamViewer等遠程軟件或圖形驅動會注入一部分庫到進程中這類庫跟CUDA本無關系但偶爾會改變DLL搜索路徑優(yōu)先級。遇到玄學問題可以先在干凈環(huán)境下測試。5.3 顯存不足與顯存碎片化的排查思路GPU推理的顯存管理是個經(jīng)典問題。Paddle Inference默認用緩存分配器預分配顯存后不會馬上歸還給驅動這跟訓練框架類似。在EnableUseGpu里指定的第一個參數(shù)就是預分配大小。顯存不足的常見情況推理進程啟動很慢顯存占用持續(xù)上漲最終報CUDA out of memory。這時候先確認是不是有多個GPU進程在跑Windows下可以用nvidia-smi查看GPU占用。如果只有一個進程看看是不是模型過大或者TensorRT構建engine時臨時分配了大量顯存。有時候訓練和推理共用GPU也會導致沖突。比如顯存只有6GB訓練任務占了5.5GB推理任務只有500MB可用任何模型都會OOM。建議配置GPU隔離Windows下一般用環(huán)境變量CUDA_VISIBLE_DEVICES來切換但注意這個變量在多進程場景下要提前設置好別在代碼里改。如果你想在推理進程退出時完整釋放顯存Paddle提供了paddle_infer::Predictor::ClearInterpreter之類的方法但更實用的做法是直接調用config.EnableMemoryOptim(true)開啟內存優(yōu)化。這個選項讓Paddle在算子執(zhí)行前后復用顯存峰值占用能明顯下降但代價是增加一點調度開銷實際推理性能幾乎無影響。5.4 多模型加載與單例Predictor的設計建議實際項目里很少只跑一個模型通常會同時加載多個模型或者同一個模型多個實例。Paddle每個Predictor對應一份模型實例它們之間的顯存和線程是獨立的所以要注意整體資源控制。我比較推薦的做法是每個模型建立一個Predictor池池的大小根據(jù)并發(fā)請求確定。Predictor本身不是線程安全的多個線程并發(fā)執(zhí)行Run可能會有問題最安全的方式是每個線程持有自己的Predictor實例。Paddle內部有一些線程池和常量優(yōu)化如果你有很多Predictor實例每個實例都會初始化一遍圖優(yōu)化和算子顯存和CPU開銷會翻幾倍。解決辦法是提前構建好TensorRT靜態(tài)engine并緩存避免重復構建。還有一種方案是把多模型融合成一個模型在某些場景下可行但通用性不高。實際操作中我通常把模型按業(yè)務模塊拆分用獨立的Predictor管理類統(tǒng)一控制生命周期在服務啟動時預加載避免運行時頻繁創(chuàng)建銷毀。6. 性能調優(yōu)從能用變成好用6.1 CPU與GPU推理的取舍很多人拿到Paddle Inference就默認用GPU其實小模型在CPU上可能更快。這涉及一個基礎概念GPU的延遲不一定比CPU低但吞吐量遠高于CPU。對于batch1的低延遲場景CPU可能反而有優(yōu)勢因為不需要拷貝數(shù)據(jù)到GPU。所以如果你的模型很小比如幾百MB的輕量模型且請求量不大CPU推理就夠了MKLDNN開啟后性能也很可觀。跑benchmark時我習慣于反復預熱后再計時因為CUDA運行時、TensorRT engine構建、Paddle圖優(yōu)化這些都會在第一次推理時發(fā)生導致第一次很慢。Paddle也提供了config.SwitchIrOptimization(true)和預熱循環(huán)的配合用10到20次無關推理把運行時狀態(tài)跑熱再統(tǒng)計真實延遲。6.2 TensorRT與Paddle算子融合的細節(jié)觀察當啟用TensorRT引擎時Paddle并不會把所有算子全部交給TensorRT而是先做圖分析把支持的部分切成子圖再交給TensorRT。這意味著最終推理圖可能是“Paddle原生算子 TensorRT子圖”混合的。如果你想知道哪些子圖被切到了TensorRT可以打開調試日志config.EnableDebug(); config.SwitchIrDebug(true);日志里會打印pass執(zhí)行情況包括每個子圖的算子數(shù)量、輸入輸出張量。我常常通過這個日志判斷為什么某些模型TensorRT加速效果不明顯——往往是因為切出來的子圖太小TensorRT根本來不及發(fā)揮優(yōu)化能力。一個模型如果全是卷積和pooling子圖會非常大TensorRT加速效果顯著。如果模型里有大量自定義算子、控制流if/loop或動態(tài)shape操作子圖會被切得很碎加速效果大打折扣。這不算錯誤只是性能優(yōu)化的約束條件。6.3 顯存預分配、緩存與批處理的高級調優(yōu)對于高吞吐場景比如推薦系統(tǒng)或者視頻流處理盡量使用batch推理。Paddle Inference支持動態(tài)batch但你需要手動拼接輸入數(shù)據(jù)。一張一張推理和批量推理吞吐量差距可能達到5到10倍尤其是GPU上。一個常見的誤區(qū)把batch設得越大越好。實際上batch太大TensorRT在kernel選擇時會傾向并行度更高的策略但模型本身有內存帶寬限制超過某個閾值后吞吐不再增長反而會因為顯存不足報錯。我一般用nvidia-smi看顯存殘量找到batch的上界。還可以考慮多流推理。Paddle對單卡多流的支持比較有限但你可以自己開多個線程每個線程一個Predictor分別跑不同的batch間接實現(xiàn)多流并行。這種情況下要注意所有Predictor共享同一塊GPU顯存總量要精打細算。6.4 從Windows到Linux的遷移注意事項雖然本文圍繞Windows展開但很多生產(chǎn)服務器是Linux。Paddle Inference的Linux預編譯包同樣有對應的版本遷移時主要注意幾個點。第一動態(tài)庫后綴不同。Windows是dllLinux是so。代碼里不要硬編碼路徑盡量用配置或相對路徑。第二Linux下cuDNN和TensorRT的安裝路徑不同通常用軟鏈接管理版本。第三CUDA的運行時庫搜索路徑是rpath和LD_LIBRARY_PATH需要導出環(huán)境變量。第四Linux下沒有Visual Studio但GCC/G版本要跟預編譯包要求對應一般Paddle官方推薦GCC 8.2以上的版本。我個人的建議是Windows版用于本地開發(fā)和單機驗證一旦確認模型和推理邏輯無誤就用Linux版部署到服務器。因為Windows和Linux的TensorRT engine緩存不通用正式環(huán)境用Linux的包重新構建一次engine緩存才能保證最優(yōu)性能。7. 寫在最后的經(jīng)驗之談這套Paddle Inference環(huán)境我已經(jīng)在好幾個項目里用過了一個非常深刻的感受是版本對齊就是最大的坑但也是最好解決的問題。只要你嚴格按照CUDA 11.8 cuDNN 8.6.0 TensorRT 8.5.1.7 VS2019這套組合去裝依賴版本兼容性問題會少很多。反而是那些“順便升級一下”的操作比如把cuDNN從8.6升到8.9、把TensorRT從8.5升到8.6容易引發(fā)各種dll不匹配。另外一個心得是不要過度依賴預編譯包里自帶的third_party目錄。它只是把Paddle需要的一些第三方庫打個包方便你不用單獨下載MKL之類的東西但CUDA和cuDNN這種重量級依賴還是得你手動裝好把環(huán)境弄得干凈可控才是正道。如果你把這個zip當成“解壓就能用”的黑盒那多半會遇到一堆問題。但如果把它當成“Paddle Inference的Windows版本參考實現(xiàn)”對照著它的編譯選項去配置自己的環(huán)境很多問題就能系統(tǒng)性地避開。我一般會在項目里寫一個configure.bat把PATH、MKL、TensorRT、CUDA的路徑全部設置好每次開新終端都執(zhí)行一遍比手動改環(huán)境變量穩(wěn)定多了。最后再提一個小技巧在Windows上萬一遇到奇怪崩潰先試試把Compile with AVX對應的運行庫CPU指令集匹配問題排除掉老的CPU比如一些低功耗的奔騰、賽揚真的可能不支持AVX換成noavx版本的Paddle Inference包會立刻解決。這個坑我?guī)屯屡挪檫^兩次每次都是CPU硬件太老不是代碼的問題。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
51一区二区三区| 亚洲无码99| 欧美日本不卡| 炮色五月| 欧美日韩性爱操大逼| 好一吊区二区| 99操| 成人精品久久久午夜福利| 亚洲淫色网中文| 极品色www影院| 91综合中文字幕| 东北老女人的激情视频| 9l视频自拍9l九色成人| 亚洲av综合色| 黄色视频60分钟| 青椒国产97在线熟女| 亚洲日精品| 97视频620| 看日韩美女二区三区免费操逼视频| 精品视频一区二区| 男人的天堂va在线| 亚洲激情深爱文学小说网站| 精品国产72| 91人妻PORNY九色大屁股| 亚洲一区二区三区不卡国产欧美| 91老女人| 亚洲综合第一页| 秋霞福利网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产无马在线| 亚州,欧美在线| 欧美黑人与女人91~| 桃花色涩综合影院| 日韩熟妇二区| 久久精品国产精品亚洲艾通辽熟妇 | 亚洲一区二区三区久久 亚洲一区二区| 手机在线视频国内精品| 美国黄片aaa| 91综合熟女| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 久久精品免费| 狠狠躁AV| sss视频华人在线| 猛交交| 九九99久久| 99人人干| 婷婷五月成人| 久久理论字幕视频| 国产午夜视频| 亚洲AV在线资源| jiujiujiujingpin| 色哟哟av| 97AV在线观看| 一区二区三区美女超清| 亚洲日韩美国人妻| 人妻人人做人人澡人人爽欧美一区| 人妻无一区二区三区| 99这里只有精品国产| 亚洲日韩精品久久久久一区壹牛 | 天天射天天操天天干天天吃2018| 69XX一中文字幕人妻91| 成人乱码一区二区三少妇| 啪啪资源网| 亚洲一区二区三区欧美日韩| 日本三级中国三级99人妇网站| 大香蕉五月天婷婷| 女优视频第10页| 天美国产三级传媒| 人妻大香蕉| 后入精品| 日韩中文字幕精品一区在线| 婷婷影院入口| 97二区四区| 精品久久大胆人体| 国产精品伦理| 日韩色香| 特级毛片特黄久久免费看 | 亚洲自拍天堂| 亚洲五码一区二区三区| 性色一线| 久久婷婷欧美| 亚洲 中文 欧美 日韩 在线| 国产97在线播放| 超碰免费人妻在线| 91快色色色色色| 五月激情综合网| 丝袜视频一区二区在线播放国产中文| 欧美精品双插| 久久在线观看免费视频| 蜜桃无码AV一区二区| 97香蕉碰碰人妻国产欧美| 久操综合在线| 自拍第一页| 亚洲人妻在线精品| 精品蜜乳AV免费观看| 欧洲性爱无码区| 极品尤物女神在线观看| 屌妞视频久久久久久久久久久久| 久久久性爱| 国产极品精品美女视频| 久久久精品国产亚洲伊人| 久久久久网站-538在线视频-欧美永久乱码 | 91美女高潮| 蜜臀无码视频在线观看| 五月香婷婷| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 高清在线偷拍自拍视频| 亭亭丁香激情| 欧美少妇色图| 99精品网| 加勒比综合88| 天堂种子在线www网资源| 日韩精品人妻系列无码天堂| 久久久新亚洲AV| 亚洲精品色| av草草在线电影| 国产精品久久久 | 欧美最大综合网| 中文一区二区三区影院| 人妻加勒比东京热| 亚洲欧美人妻| 1024亚洲中文字幕久在线看片你懂的| 亚洲色图欧美| 国产成人亚洲精品自产在线| 97欧美色| 欧美在线视频99| 日韩电影中文字幕| 91美女丝袜诱惑视频| 亚洲色图8| 综合欧美激情网| 91成人在线| 久都青青视频| 欧美强奸乱能| 日韩精品国模| 亚洲av无线观看| 97超碰亚洲| 99老司机精品视频在线观看 | 综合色播| 欧美 亚洲 在线| 99亚洲精品| 欧美第五页| 久久久久久久国产a∨| 啊啊啊不要嗯嗯在线观看| 色综合V| 日han少妇无码| 日韩15p| 操狠狠| 私人尤物在线精品不卡| 91+欧美| 性爱乱伦视频免费| 大逼色网站| 亚洲日韩精品在线播放| 欧美天天综合网版| 91蜜臀在线久久久久| 91在线免费精品视频| 免費人妻夜夜爽天天爽爽一区| 日韩一级性爱无码| 国内成人圈中文字幕无码视频| 99热只有这里有精品| 久操国产在线| 久操99| 国产一在线观看| 精品女同一区| 欧美色图亚洲特色| 新版天堂中文资源8在线| 最新亚洲黄色免费电影| AV一区观看| 欧洲精品人妻| 97干在线看| 四虎av在线| 啊啊啊不要好疼视频| 亚洲国产97| 97视频在| 大香樵伊人网| 人人操人人插人www| 色与欲影视天天看综合网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 婷婷15月天青娱乐| 九九精品美女高溯喷水| 国产97视频免费观看| 69久久| 国产suv精品一区二区四| 园内精品自拍视频在线播放| 综合色欧美| 91精片| 91精品少妇搡搡搡| 综合色拍| 2019AV天堂| 亚洲欧洲国产综合av| 免费操逼91| 欧美激情一| 天天摸夜夜摸| 骚货人妻偷情自拍在线视频| 成人a级高清视频在线观看| 白嫩91在线亚洲| 91伊人大香蕉| 久久久999网站| 久久久 国产精品| 精品无码一区二区三区色欲| 人妻熟女一区二区| 亚州欧美总和| 色爱综合网欧美| av大香蕉| 天天射天天操天天干天天吃2018 | 97干97色| 午夜美女诱惑电源网| 免费亚洲国产精品久久一区| 久久久精久久久| 天天日天天插| 色情成人五月天| 亚洲一卡2卡3卡4卡乱码网站| 蜜臀一区二区三区在线| 久久97超碰| 亚洲色婷婷综合久久一区二区三区| 97精品综合久久网| 啊啊啊啊啊啊啊啊啊啊在线观看| 麻豆国产原创AV色哟哟| 欧美综合网1| 亚av顶级裸体一区二区三区四区五区| 欧美在线l亚洲| 澳门成人网站久国产日韩| 95人妻爽爽人人做人人澡| 黄色网址在线免费观看| av国产无码| 日本午夜久久电影| 中文字幕91综合| 五月天开心网| 黑丝少妇麻豆| 96久久久精品| 国产一区二区精品在线视频| 夜夜欧美| 熟女激情综合网| 欧美日韩国产成人高清| 在线免费观看日韩一区| 中日亚韩免费视频| 亚洲AV无码成人精品久久| 99自拍B亚洲| 欧美日韩国产色图在线| 大香蕉一人在线| 狠狠狠一区二区三区| 日本三级久| 精品无码久久久| 91人妻丝袜无码| 欧美综合色站| 97视频在线观看高清资源| 97精品97| 2021国产成人精品久久| 综合第一页| 校园春色综合网| 国产兽交视频在线播放| 久久久国产亚洲精品系列| 岛国精品视频在线观看 | 口爆欧美91| 亚洲欧洲第二视频在线观看色图| 超碰是碰在线观看| 日本国产欧美一区三区二区| 国产超碰在线| 男女啪啪啪18禁网站| 中字幕人妻一区二区三区| 精品毛片av一区二区| 久久久免费的精品| 蜜桃在线观看一区二区三区| 夜夜春夜夜操| 啪啪啪精品| 中文字幕在线高清男人的天堂 | 欧美巨大性舒爽顶到了| 美女一区二区国产精品| 韩国久久97| 久湿久久| 国内毛片国产欧美拍| 91三级理论片播放器| 五月丁香综合| 99热这里只有精品1| 国产操逼网站亚洲一级黄色| 六月丁丁香| 操淫穴亚洲五月丁香| 亚洲成人AB| 成人午夜高潮av猛片| 无码外流操逼视频| 永久免费发布性爱网| 91Chinese在线| 国产强奸乱伦xd| 久久精品性| 婷婷亚洲综合| 91精品网站| 玖玖玖玖精品国产剧情| 亚州色站 日韩电影| 91精品91久久久久77777| 激情五月天插| 99热aaa| 超碰97男女| 久久久久女教师免费一区| 九九色热| 婷婷五月天补不补| 午夜福利久久久噜久噜久久综合| 日韩三级av片| 这里都是精品在线观看| 国产97色在线 | 亚洲| 国产精品成人久久一区二区三区| 欧美日韩国产中文精品字幕自在自线, | 四虎精品一区| 粉嫩不卡一区二区性爱| 亚洲和欧美裸体美女双飞视频| 亚洲欧美色图| 久久9精品视频| 欧亚日韩一区在线| 草伊人高潮喷水超碰| 天天综合青苹果| 色五月婷婷五月天| 九九亚洲| www四虎| av天堂电影网| 青青草日本中文字幕| 操逼无码操逼| 亚洲青色欧美| 99re公开精品免费视频| 欧美激情 亚洲色图| 国产97视频免费观看| 无码久久亚洲高清,| 资源在线观一 二| 少妇久久久久久久| 国模不卡一本二本三电影| 欧美 精品国产制服第一页| 免費黃色視頻觀看一| 欧美五区| 1024久久高清视频| JIZZJIZZ亚洲女人被躁| 男人的天堂一区三区| 久久大精品乱码视频人妻熟女| 日韩精品-原创伙伴| 一区二区激情国产熟女| 亚洲AV麻豆Aⅴ无码电影一| 久久国产视频专区一二三 | 国产午夜激片Av毛片不卡| 亚洲影视第一页| 熟女六十路| 日韩不卡网操逼中文字幕日韩| 最新的亚洲无吗| 亚洲十八禁止| 婷婷五月丁香五月| 嫩草在线视频| 夜色综合| 亚洲双插| 欧美性暴力猛交XXXX| 国产隔壁老王影院在线| 91精品国| 精品无码久久久久| 亚洲激情综合| 操逼操逼逼操操逼91| 97亚洲色图| 99操| www.色婷婷.com| 强奸乱伦AV网址| 91狠狠狠| 亚洲欧美色图| 欧美天天综合站| AV网站高清无码在线观看| 中国熟女网站| 校园春色欧美色图| 五月天精品| 天天干干天天干干| 天美传媒婬乱在| 欧美久久人妻少妇一区二区| 嗯啊免费视频| 婷婷伊人綜合中文字幕| 无码人妻精品一区二区中文| 青娱乐妇女性生活| 色区久久| 大屁股人妻女教师撅着屁股| 性高潮久久久久久久久久久| 亚洲情色图片区| 欧美专区日本专区| 岛国片在线播放| 天天做天天爱| 一本色道久久综合狠狠操| 上床不卡网站| 精品久久久中文字幕不| 久久亚洲AV成人精品无码| 国产h小视频在线观看免费| 青青久日| 风月影院男女十八禁| 亚洲丝袜天堂| 操九九九九九九| 六月丁香啪啪| 极品白嫩美女白浆成人福利在线看| 18禁无码永久免费无限制| 蜜臀少妇一区二区| 日韩熟女视频二区| 丝袜狂射91| 亚洲各类熟们中文字幕| 国产精品久久久无码AV网站| 性videos欧美熟妇hdx| 欧美亚洲小说| 秋霞一级视频在线观看免费| {男男暴菊gay无套网站| 老熟女乱伦一区| 国产精品九九九| 午夜操操操| 国产久9| 极品出轨视频网站| 一区二区三区一亚洲中文字幕、综合区灬| 大香蕉在线SuP| 啊啊啊啊啊啊啊啊啊在线观看| 欧美伦乱爱| 日日干男人的天堂| 中文字幕伊人| 欧美激情精品久久久久久| 午夜噜噜噜| 欲香欲色综合天天伊人| 久久大黄片| 精品国模无码| 日韩精品视频在线观看一卡二卡| 亚洲一区二区三区欧美日韩| 欧美日综合| 又黑又大又粗| 亚洲欧美setu| 道久久五香丁月婷婷激情综合| 青操影院| 欧美牲| 免费啪啪一级视频| 国产1024在线播放| 亚洲欧洲精品视频发布| 狼人久草| 欧美一区二区情色| 中文字幕精品专区搜索结果91| 国产97色在线 | 亚洲| 色香AV| 日本熟女不卡视频| 1级黄色夫妻对换性交免费看| 樱花蜜乳av| 日韩少妇一区二区三区| 又粗又长又爽在线观看| 国产成人久久久精品免费AV| 骚货| 丰满丝袜少妇AV| 亚洲男人在线观看天堂| 色y情视频免费看| 国产自产自拍| 亚殴在线| 99热国产| 婷婷五月天激情四射| 婷婷在线视频在线观看| www.99视频| AV天堂男人的天堂| 综合网91| 777奇米影视777四色| 大香蕉520| oumeisetupian| 精品人妻一区二区蜜桃视频| 午夜福利一区二区影院| 精精夜夜| 欧美在线天堂| 校园春色AV天堂| 久久久96| 黄色激情电影在线观看| 欧美日韩丝袜| 九九九九一区| 日本肉体xxxx裸交| 成人一区二区三区四区| 手机看片91人妻| 人妻少妇av在线观看| 97日视频| 日韩精品中文字幕人妻| 色蜜AV| 人妻丰满熟妇av无码区蜜桃| 一级黄色性爱A级片| 亚洲精品一二三四区| 96国产精品| 人干人人人操人人摸| 午夜精品久久久99| AAAA级日本片免费视频| 蜜桃久久一区二区三区| 夜夜性| 黄aaaaaaaaaaaaaaaaaa色网站| 91成人在线| 欧美一级A一级a爱片久久| 五月天色图| 91老熟女91老女人| 96久久精品一二三区色欲| 国产极品999| 男人久久天堂| 精品国产嫩穴视频| 张柏芝国产一区在线观看| 99热在线观看| 色臀AV| 91在线页| 欧美第二页| 丁香六月婷| 四虎AV在线播放| 99re在线观看| 精品视频在线观看| 91扒丝袜综合在线| 久久精品国产亚洲AV高清演员表| 夜夜嗷嗷一区二区| 国产精品视频自拍在线| 亚洲不卡不卡中文字幕不卡| 淫荡网址| 人人澡综合涩| 93人人操人人| 天天天干977| 神马精品视频| 色屁屁影院www国产| 欧美在线啊啊啊| 国产91啪| 亚洲毛片久久| 丁香五月激情婷婷| 啪啪啪精品| 中文幕97| 性爱av在线免费观看| 精品国产乱子伦一区二区三区,精品一| 国产毛片精品一区二区色欲黄A片| 亚洲图片91| 婷婷五月天久久精品视频一区二区三区 | 亚洲精品亚洲人成在线麻豆| 一区二区视频在看| 69精品人人人人| 久久久免费一级黄片| 一卡二卡三卡| 91成人在线| 91女优在线观看| 日本久久精品| 国产又大又硬又长又粗| 欧美一区二区日韩三区| 日日噜噜夜夜久久亚洲一区二区 | 国产无马av| 舔足天天操天天射| 丰满搜索结果 -第18页- 久久高清无码 | 亚洲素人综合| 中文字幕 一区二区 亚洲无码| 欧美三级一级| 欧洲亚洲综合| 一区二区国产视频在线观看| 亚洲国产尤物yw在线观看| 日韩成人私密一级精品av| 97亚洲在线| 亚洲熟女乱熟乱熟妇综合网二区| 18禁的网站在线| 欧美综合另类| 久久精彩视频9| 久久精品国产亚洲AV无码电影| 欧成人精品H无码| 柠檬AV导航| 青青草国产亚洲精品久久 | 中国少妇XXXX做受| 精品少妇一区二区| a片亚洲一本通视频| 久久久久久精品免费看A级| 91激情| 日本在线15p| 久久九精品| 综精品久久久aaaa| 少妇内射视频| 五月丁香狠狠爱| 国产AV无码AV| 一级特黄aaa大片在线观看成人一级片在线观看 | 国产精品对白自产拍| 久久久久密臀一区二区| 国产女生在线| 国产成人亚洲精品无码古代早漏男| 亚洲欧美人妻| 天天综合网在线观看| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产传媒一区二区三区| 9.1小视频| 男女性扦B| 欧美中文狠| 人人澡综合涩| 日本不卡二三区| 五月天激情小说| 久久婷婷热| 欧美综合区| 在线国产一区二区av| 午夜男人av| 精品人体无圣光凹凸| 欧亚性爱在线视频| 国产精品久久99日日| 中国少妇XXXX做受| 久久精品国产亚洲AV无码做| 久久精品国产亚洲AV嘿嘿| 操b在线观看| 又大又大又大又粗爽高潮观看 | 人人澡人人弄| 成人久久精品| 人妻少妇久久| 国产精品免费视频人成| 欧美性巨大╳╳╳╳╳高跟鞋| 成人一级性爱| 日本一区二区成人在线| 性爱av网站| 日日夜夜天天| 日韩紧密久久| 亚洲偷拍欧美激情| 久久久久久加勒比| 四虎在线视频| a男人的天堂久久一级A毛片 | 9热9热综合网| 老司机免费视频在线91| 日本亚欧爱爱| 九九九热| 翔田千里A片一区二区| 国产精品女生av| 国产精品一级片在线看| 曰韩精品九九无码| 青青国产在线拍揄自揄拍| 国产精品久久久久999| 国产美女高潮视频| A级片一区| 天天色图| 在线观看av区| 99啪| 色网1| 欧美日韩在线小说| 天天插网| 人妻99p| 爱爱动态120秒| 亚州综合AⅤ| 亚洲男人的天堂网| 超碰97护士| 最新的亚洲无吗| 久久黄黄| 国产精品白丝AV| 日韩无码一级黄色av片| 色综合尤物| 日本一天色道久久久精品视频| 久久999久| 久久久久久久久一区二区三区| 91精品久久久| 99热97| 黄页网站成人免费| 二男一女成人A片| 一二三四日本视频高清| 日韩成人人妻网站| 超碰人妻中文在线| 啊啊啊草死我| 在线不卡视频| 97操综合| 天天搞在线综合网| 亚洲丝袜色| 欧美日韩亚洲少妇寂寞影院正在播放 | 啊啊啊慢点| 欧美97| 九九热最新| 欧美黄页在线| 麻豆尤物视频网| 日韩欧美午夜视频在线| 日韩午夜国产| 欧美色www亚洲国产阿娇要播| 美女自卫慰黄网站免费| 超碰97欧美日韩| 亚洲无码成人精品| 色综合中文字幕不卡| 丰满人妻-区二区三区免费看| 欧美大波激情xxxx| 中文字幕精品一区二区精品| 天天综合网视频91| 亚洲各类熟们中文字幕| 成人天天爽| 国产高清精品一区二区三区毛片| 熟妇熟女亚洲天堂网| 欧美高清91| 婷色五月| 97资源站日韩| 天天91~综合入口| 99国产女人| 99操逼| 96超碰网| 亚洲有码 视频一区| 久超碰这里只有精品| 成人a大片在线观看| 九九九九九九视频| 国产精品探花在线| 久热这里| 超踫中文字幕| 亚洲春色一区二区三区| 欧亚第一综合网| 香蕉久久AⅤ...| 东京热视频网| 久久久久元码视频| 日韩性爱再线视频| 人妻夜爽夜夜爽| 无码又爽又硬又激情免费视频| 精品人妻一区二区三区免费视频| 激情av| 密臀成人视频久久久| 亚洲色五月| 日本不卡一区二区| 偷拍网站久久男女男| 国产精品分类在线观看| 97人亚洲综合字幕| 久久久久久电影| 亚洲色图自拍| 国产精选三级在线观看| 亚洲少妇综合| 五月丁香激情综合| 无码78| 欧美亚综合色图| 无码精品蜜桃一区二区三区ww| 久久网亚洲| 青青草原人妻| av日韩国产一区二区| 日韩成人小视频| 久久嫩草国产成人一区| 老熟女乱子伦中文字幕一区二区| 超碰97欧美日韩| 欧美色五月| 麻豆国产97在线| 久久亚洲日韩国产欧| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | www.婷婷| 日本一区二区做爱的视频| 国产精品99999| 超碰在线成人电影| 久日91在线| 丝袜性亚洲| 校园春色综合| 婷婷色综合| 天天色播亚洲综合网站| 青青草华人在线欧美在线| 久久久免费的精品| 长长久久88视频| 亚洲天堂久久| 亚欧精品久久久久久久久久久| 97在线视频免费| 欧美色天堂网在线视频| 国产高清无码一区二区三区四区皇冠| av网站免费线看| 色偷偷男人的天堂麻豆| 富二代亚洲精品99| 午夜偷拍久久熟女| 长长久久免费视频| 欧美在线亚洲| 亚洲国产激情国产av| 欧美色蜜桃97| 神马午夜久久久| 午夜综合在线| 欧亚成人在线视频| 日韩99精品视频综合区| 99人妻| 日韩99999| 四虎精品亚洲| K8久久久久| 东京男人天堂| 欧美亚洲韩国视频十五区| 久久久精品一区二区| 青青草玖玖爱| 亚洲色综网| 91精品国产长腿丝袜美女| 插B在线观看| 91天堂丝袜美腿| 精品人妻高清麻豆av| 97国产精品久久久久| 欧美综合狠| 9久久久久久| 天天综合官网| 欧美18老人禁| 热无码中文亚洲H一道本一区二区| 欧州一区二区三区四区| 亚洲日本激情| a v网站在线播放| www.色操逼| 色情综合网| 国产丝袜美女诱惑| 亚洲天堂第一页| 亚洲精品白丝| 亚洲黄色电影| 精品国产三级av韩国在线| 亚洲人体视频在线观看| 欧美成人A天堂片在线观看| 精品v日韩欧美国产| av凤凰久久久| 热久久91婷婷| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 久久少妇| 国产91会所女技师在线观看| 亚洲城人男人的天堂| 中文字幕版| 韩国毛片一区二区三区| 99夜夜操| 人妻少妇被猛烈进入中| 五月天婷婷基地| 欧美天堂日韩三级国产传媒| 啊啊啊啊啊啊啊啊啊在线观看| 大香蕉人妻久久| 1级午夜影院费免区| 最新国产精品久久精品| 熟妇视频一区二区三区在线观看| 夜夜 中文视频rt| 国产97视频| 国产区91柔拿会所技师| 中文字幕日韩综合| 亚洲有码第一页| TS人妖另类精品视频系列| 天天视频黄网站| 亚洲综合码| 巨乳特殊服务按摩| 国产欧美日韩一区二区三区| 天天综合91在线| 久久精品91| 色欲三区| 久久9 9 9精品| 超碰97人妻自拍| 精品一区二区成人| 人妻美腿丝袜制服诱惑综合天堂-| 超碰色美女| 黄色AAAAAAAAAAA大片| 久久久久久久久久久人妻| 国产日韩美女小穴视频网站不卡| 国产在线激情视频| 狠狠中文字幕| 男人的天堂com| JIZZJIZZ国产精品喷水| 国产天天看| 综合久久少妇中文字幕| a久久| 亚州五月| 亚洲日韩成人性爱视频| 97超视频在线观看| 日韩免费高清大片在线| 久热久一区二区三区| 欧美美女视频| 涩五月婷婷| 99久久久| 色99在线| 亚洲欧美碰碰| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 97精品视频网站| 亚洲精品一区二区精华| 一区久久久二区| 久久91| 翘臀vidoes| 亚洲综合第一页| 116美女午夜| 可免费观看的av毛片中日美韩| 性高潮久久久久久久久久久| 色官网在线| 四虎av在线| 色九区| 夜夜高潮夜夜爽夜夜爱爱一区| www.色操逼| 91丰满| 久久久98网站免费视频| 97爱综合| 97色97好| 久久人人舔人人爽舔人人av片| 久久6热精品99视频| 男人a天堂手机在线版| 91亚洲丝袜| 国内精品久久久久影院亚洲| 青青草原香蕉日本Ap| 久热婷婷| 测评在线观看AV| 天天夜夜久久| 99久久久久久久久| 东京太热男人的天堂久久久| 亚洲日韩AV视色| 岛国爱情动作片在国产AV无码专区亚洲AV漫画 | 操一区| 18禁网站在线播放| 亚洲做性| ss久久| 成人性爱视频在线看| 精品9999| 超碰亚洲欧美日韩无| 日韩熟女操逼| 国产91丝袜在线播放蜜月| 99操逼| 国产亚洲99久久精品熟| 欧美在线色| 色婷婷狠狠| 翔田千里Av在线| 青青草原成人| 九九久久首页| 久草福利在线资源站| 无码人妻一区二区三区免费九色| 精品视频97| 极品色www影院| 91黑丝操| 思思热er精品视频| 色综合天天| 久久欲| 天天舔日美女视频| 国产农村妇女精品1区二区| 一区不卡在线观看av| 后入综合久久| 激情露脸爱| 亚洲精品a人片在线观看视| 91天堂网| 在线观看 99热| 国产天美欧美| 国产极品美女高潮无套在线观看 | 国产99久久99热这里只有精品15| 中文 人妻 制服| 天天操人人操骚逼网站| 国产亚洲人妻综合日韩 久久| 中文字幕一区二区三区字幕| 精品一区二区三区蜜桃| 夜夜骑天天燥| 淫色网综合| 9久久精品| 黄片com.| a片偷拍视频| 天天做日日爱夜夜爽| 欧美性爱第一页久久| 另类小说欧美激情校园春色| 伊人aaa| 5252色欧美在线| 免费精品99| 欧美成人午夜免费福利785| 亚川综合视频| 亚洲啪啪综合?v一区综合精品区| 国产三级中文字幕粉嫩| 97操在线| 久久夜嗨| 中文有码第五页| 人妻少妇蜜桃视频欧美一区| 日本99久久| 天天躁日日躁AAA片李宗瑞| 福利操逼| 中文字幕日韩电影人妻| 精品人妻视频入口| 97精| 久久久无码视频| 色悠悠伊人网五月天| 97超碰中文字幕| 青木玲在线不卡| 一本一首道人妻少妇免费久久| 人人妻人人操人人乐| 五月丁香啪啪啪| 天天天天干| 色5月婷婷| www.色婷婷色综合| 亚洲日韩精品在线播放| 日韩av不卡在线观看| 人人摸人人叼| 一区二区三区欧美激情| 日本网色| 五月花婷婷| 91国产精品在线看| 欧美专区在线| 一区二区首页| 99国产精品免费| 人人噜夜夜操| 啊啊啊啊啊好舒服视频| 女上位精品在线| 丝袜加勒比| 精品久久97| 97免费在线| 国产精品久久久久久久久久梁医生| 内射夫妻三片| 在线无码视频| 国产一区二区欧美日本| 狠狠综合网| 天天综合色电影| 97久久精品亚洲中六字幕| 日韩av熟女一区二区三区成人| 国产婷婷一区| 夜夜 中文视频rt| 欧美96交| 狠狠操狠狠操操| 性爱乱伦视频免费| 搡老熟女老女人老熟妇免费视频| 91啪啪视频| 成人精品电影| 国产精品欧美激在线| 伊人久久亚洲色欲综合网站| 日日骚一区二区三区| 校园春色五月天| 国产综合在线视频网站| 国产精品久久久久久片| 五月丁香啪| 天天做天天爱天天爽AV| 十八禁电影伊人网| 屁股久久久久久久久久| 少妇无码av专区线| 爱射综合| 欧美白嫩在线放| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 亚洲国产精品乱码在线观看| 久久亚洲不卡一区二区三区 | α√在线| 久久久影院| 九九人妻| 人人操人人舒服| 五月婷久久| 麻豆一区在线| 特色a在线上| 激情综合网五月婷婷五月天| 亚洲图片 91| 丝袜色综合| 国产美女在线精品免费看| 强奸乱伦av电影| 国产有码一区| 综合亚洲欧美| 秋霞蝌科网日本一区| 久久久久久久一级黄色打同平台| 91超碰碰在线| 囯产精品久久久久久久久久梁医生| 入口操逼网站| 久久久久久久久久久久黄色 | 亚洲91大片| 操逼网站网站| 婷婷五月天av| 物业黑人 AV一区| 中文AV制服乱伦| 欧美男人一区| 老司机福利社视频在线观看| 吖在线不卡一区二区国产剧情| 七久久久| 欧美色老汉| 久久久久国产精品喷潮免费观看臀| 日本不卡高清免v欧美日韩在线观看| 99热线麻豆| 日韩Va亚洲va欧美Ⅴa久久| 蜜臀AV一区二区三区激情综合| 亚洲综合在线91| 欧亚性爱视频免费看| 欧美亚洲美少妇一区二区| 午夜操一操| 大香蕉宗合网在线| 久久精品噜噜噜成人看免欧美大片| 美国一区二区三区视频| 久久国产精品,久久国产| 中出欧美| 狠狠 91| 大香蕉欧美| 国产精品一二三区福利| 91热热色| 丁香六月综合激情| 久区视频| 99在线精品观看99| 夜夜嗨一区二区三区三州加勒比| 日韩乱伦影音先锋| 国产视频小说| 日韩国产乱子伦App| 97色色,97综合| av强奸乱轮| 97超碰久久色| 精品一区二区成人| 91无码人妻| 在线观看精品国产免费| 91热色| 综合网色| 夜夜爽夜夜高潮夜夜爽| www.99热| 97超碰欧美| 色婷婷成人综合| 婷婷在线视频在线观看| 97精品国产手机| 国产精品久久久久中文字幕| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 搡老女人老妇女AAA一VU麻豆| 亚洲自拍欧美色综合| 久久鲁干| 亚洲高清91| 中文字幕 av v| 国产黄色在线播放观看| 97超碰久| 无码日韩网站| 欧美色乱| 日韩免费中文字幕视频| 怡红院怡春院| 久操网址| 色97欧美| 高清不卡国产| 一区操逼日比视频| 亚洲AV永久无码精品成人调教| 大香蕉婷婷| 日韩成年人性爱视频| 蜜臀AV成人精品蜜臀| 欧美日本一区二区a人| 亚洲欧美洲综合| 中文字幕乱碼在线| 日本五十路熟女一区二区| 大粗鳼巴久久久久| 色天使大香蕉| 岛国片在线观看视频亚洲| 欧亚日韩一区在线| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 亚洲最新中文字幕免费 | 色欧美天天| 艹精品| 精品对白久久不卡| 99黄页网站| 一区二区你上我| 久久一区二区高清免费| 欧美色院| 亚洲怡春院| 亚洲AV乱码专区国产噜噜亚洲 | 欧美大干日韩| 日本人妻一区二区| 日韩AV熟女乱伦| 在线观看不卡一区二区三区| com 首页 18岁 禁区 女优 免费 精选 同城 | 國產尤物AV尤物在線觀看| 9久精品| 干美女人妻| 日韩传媒在线| 骚逼高潮久久精品| 免费看A片毛毛片在线播| 思思久热在线精品66| 黄页网站成人免费| 国产熟女精品区| 超碰亚洲欧美日韩无| 国产亚洲色停停久久99精品91| 亚洲欧美日韩免费电影| 欧美人妻二区三区| 天天操天天干一区二区 | 天堂v无码免费视频| 日本韩国国产精品一区| 久操综合在线| 日本大香蕉综合网| 超碰人妻在线| 精品久久久一本一道| 999精品国产高清一区二区| 麻豆久久视频在线地址| 好爽视频在线观看| 91丨九色丨大屁股| 亚洲做性| 伊人网在线视频| 久久国产免费激情视频| 91丝袜激情在线| 操逼www.| 日韩电影中文字幕| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 日韩操啪| 密臀在线免费观看| 欧美亚洲尤物久久| 国产一区二区精品久久久不卡蜜臀| 大香蕉综合网| 久久男人精品| 超碰偷拍| 另类图片五月| 自拍内地三级在线观看| 欧美韩国你懂得在线 | 美女的肌被草喷水视频| 国产浮力影院第1页| 国产自制av蜜乳| 日韩电影天堂视频二区三区| 中国女人内射6XXXXX| 亚洲综合网91| 蜜臀av中字字幕网站| 青娱乐休闲视频在线观看| 好吊色一区| 国产少妇肉丝在线观看| 国产美女mm131爽爽爽爽| 日韩欧美日韩| 亚洲精品久久久久久| 后入人妻一区| 亚洲激情综合| 日韩欧美午夜视频在线| 美女91| 五月天色综合| 电家庭影院午夜69久久夜色精品国产69乱| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 东京热亚洲一区二区| 熟女精品日韩一区二区三区| 丁香六月激情| 目产99999久久999| 99无码视频| 999狠狠综合|