欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

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

Paddle Inference Windows部署實(shí)戰(zhàn):CUDA/cuDNN/TensorRT版本匹配與C++推理 簡(jiǎn)介本資源是面向Windows平臺(tái)AI推理開發(fā)者的Paddle Inference 3.0.0預(yù)編譯開發(fā)包專為需快速集成高性能深度學(xué)習(xí)推理能力的C工程而優(yōu)化適用于模型部署、邊緣計(jì)算及工業(yè)級(jí)服務(wù)開發(fā)等場(chǎng)景。壓縮包共623個(gè)文件涵蓋569個(gè)頭文件h/hpp用于接口調(diào)用與類型定義13個(gè)靜態(tài)庫(kù)lib和2個(gè)導(dǎo)出文件exp支撐鏈接構(gòu)建5個(gè)核心DLL如paddle_inference.dll、mklml.dll、mkldnn.dll提供運(yùn)行時(shí)推理引擎與數(shù)學(xué)加速能力另有proto與pb文件支持模型序列化解析整體體積達(dá)528.04MB。內(nèi)容預(yù)覽顯示其深度整合Intel MKL含lapacke.h等數(shù)學(xué)接口、CUDA 11.8、cuDNN 8.6.0及TensorRT 8.5.1.7具備AVX指令集優(yōu)化與VS2019兼容性。目前已有132人下載學(xué)習(xí)開箱即用省去復(fù)雜環(huán)境編譯與依賴適配過(guò)程顯著降低Windows下PaddlePaddle C推理部署門檻。 拿到這個(gè)文件名的時(shí)候我第一反應(yīng)是這是一臺(tái)Windows機(jī)器的Paddle Inference推理環(huán)境全家桶。x86-64-cuda11.8-cudnn8.6.0-trt8.5.1.7-mkl-avx-vs2019-paddle-inference-3.0.0.zip光看名字就能拆出七八個(gè)關(guān)鍵信息。如果你是做深度學(xué)習(xí)模型部署的或者剛接手一個(gè)C推理項(xiàng)目看到這種預(yù)編譯包時(shí)最怕的不是別的就是版本對(duì)不上、DLL缺一堆、跑起來(lái)直接崩。這篇文章就圍繞這個(gè)包把我實(shí)際部署Paddle Inference時(shí)踩過(guò)的坑、驗(yàn)證過(guò)的步驟、調(diào)過(guò)的參數(shù)全部梳理一遍從環(huán)境匹配講到推理代碼再到TensorRT加速和常見(jiàn)報(bào)錯(cuò)排查爭(zhēng)取讓你拿到包之后能一口氣跑通。先說(shuō)這個(gè)包具體能干什么。Paddle Inference是PaddlePaddle的官方高性能推理引擎跟訓(xùn)練框架解耦專門為上線部署優(yōu)化。這個(gè)zip是預(yù)編譯好的Windows x64版本編譯時(shí)用的是CUDA 11.8、cuDNN 8.6.0、TensorRT 8.5.1.7同時(shí)開啟了MKL數(shù)學(xué)庫(kù)和AVX指令集構(gòu)建環(huán)境對(duì)應(yīng)VS2019。什么意思呢就是說(shuō)只要你的機(jī)器滿足這些依賴版本解壓這個(gè)包配置好環(huán)境變量和CMake工程就能直接做GPU加速的模型推理完全不需要自己從源碼編譯Paddle省下幾個(gè)小時(shí)甚至一整天的編譯時(shí)間。適合誰(shuí)看剛?cè)胄凶瞿P筒渴鸬墓こ處?、需要在Windows上集成Paddle推理到C項(xiàng)目的同學(xué)以及被各種CUDA/cuDNN版本折磨過(guò)的老哥。1. 內(nèi)容整體設(shè)計(jì)與拆解思路1.1 文件名里的版本矩陣代表什么先把這個(gè)文件名當(dāng)密碼一樣逐段拆開看。x86-64平臺(tái)架構(gòu)表示64位x86指令集幾乎所有現(xiàn)代Intel和AMD處理器都適用。如果你的機(jī)器是ARM架構(gòu)比如部分Windows平板、Surface Pro X這個(gè)包就用不了。cuda11.8NVIDIA CUDA Toolkit的版本號(hào)。推理庫(kù)編譯時(shí)鏈接的是CUDA 11.8的運(yùn)行時(shí)庫(kù)意味著你的機(jī)器上必須安裝CUDA 11.8或者更新但兼容的版本向下兼容方面一般驅(qū)動(dòng)版本不能低于525.60.13具體看NVIDIA官方文檔。這里有個(gè)常見(jiàn)誤區(qū)CUDA有兩個(gè)概念一個(gè)是顯卡驅(qū)動(dòng)自帶的運(yùn)行時(shí)兼容層一個(gè)是獨(dú)立的Toolkit后面會(huì)細(xì)說(shuō)。cudnn8.6.0NVIDIA cuDNN深度學(xué)習(xí)原語(yǔ)庫(kù)版本。CUDA負(fù)責(zé)通用并行計(jì)算cuDNN專門對(duì)卷積、池化、歸一化等神經(jīng)網(wǎng)絡(luò)核心算子做了深度優(yōu)化兩者配合才能發(fā)揮GPU的性能。trt8.5.1.7TensorRT版本。這是NVIDIA的高性能推理優(yōu)化器能把訓(xùn)練好的模型做層融合、精度校準(zhǔn)、動(dòng)態(tài)shape優(yōu)化再生成推理引擎。Paddle Inference啟用TensorRT之后某些模型的推理延遲可以再降30%到50%。mklIntel Math Kernel Library數(shù)學(xué)核心庫(kù)。CPU上跑算子的時(shí)候會(huì)用MKL加速矩陣乘法、卷積等計(jì)算。Paddle Inference在CPU模式下如果沒(méi)有MKL性能會(huì)差挺多這個(gè)包默認(rèn)帶上了。avxAdvanced Vector ExtensionsCPU指令集。AVX允許CPU單條指令處理多個(gè)浮點(diǎn)數(shù)據(jù)Paddle為這個(gè)指令集專門優(yōu)化過(guò)算子跑CPU推理時(shí)速度提升明顯。注意如果你的老舊CPU不支持AVX這個(gè)包會(huì)直接報(bào)非法指令錯(cuò)誤。vs2019構(gòu)建工具鏈版本Visual Studio 2019。這個(gè)主要影響你編譯C程序時(shí)MSVC運(yùn)行時(shí)版本如果你用VS2015或VS2017去鏈接這個(gè)庫(kù)大概率會(huì)遇到運(yùn)行時(shí)庫(kù)沖突或者符號(hào)解析失敗。paddle-inference-3.0.0Paddle Inference主版本號(hào)。3.0.0是相對(duì)較新的版本API設(shè)計(jì)和舊版有差異最明顯的是頭文件引用方式變了后面代碼部分會(huì)展示。zip打包格式Windows下直接用解壓工具解壓即可。一句話總結(jié)這個(gè)包是Paddle Inference團(tuán)隊(duì)在特定軟硬件環(huán)境下編譯出來(lái)的產(chǎn)物想用好它你的開發(fā)機(jī)環(huán)境要跟這個(gè)版本矩陣對(duì)齊。1.2 CUDA、cuDNN、TensorRT三者的“鐵三角”關(guān)系很多人分不清CUDA、cuDNN、TensorRT的關(guān)系我打個(gè)比方。CUDA Toolkit相當(dāng)于GPU的“操作系統(tǒng)API”你寫CUDA代碼、編譯GPU程序、管理顯存都靠它。顯卡驅(qū)動(dòng)是“硬件驅(qū)動(dòng)層”CUDA Toolkit是“用戶態(tài)開發(fā)庫(kù)”兩者有對(duì)應(yīng)關(guān)系驅(qū)動(dòng)包含一個(gè)兼容層只要驅(qū)動(dòng)版本夠新就能運(yùn)行較舊版本的CUDA Toolkit編譯出來(lái)的程序。cuDNN是構(gòu)建在CUDA之上的“深度神經(jīng)網(wǎng)絡(luò)加速庫(kù)”它把卷積、LSTM等常用算子優(yōu)化到極致訓(xùn)練和推理框架都會(huì)調(diào)用它。Paddle推理庫(kù)編譯時(shí)指定cuDNN 8.6.0運(yùn)行時(shí)就會(huì)去找對(duì)應(yīng)版本的cudnn64_8.dll。TensorRT則更上層它是個(gè)“推理引擎優(yōu)化器”。它不關(guān)心你怎么訓(xùn)練模型只負(fù)責(zé)把訓(xùn)練好的模型轉(zhuǎn)換成推理引擎通過(guò)層融合、kernel自動(dòng)調(diào)優(yōu)、FP16/INT8量化等手段壓縮推理耗時(shí)。Paddle Inference跑GPU推理時(shí)要啟用TensorRT就必須在運(yùn)行時(shí)加載TensorRT的動(dòng)態(tài)庫(kù)nvinfer.dll等版本跟編譯時(shí)保持一致或兼容否則會(huì)報(bào)算子不匹配或版本不兼容的錯(cuò)。這三者的匹配邏輯是驅(qū)動(dòng) CUDA Toolkit cuDNN版本可接受范圍 TensorRT版本可接受范圍。實(shí)際部署中最讓人頭疼的就是dll版本沖突老版本和新版本往往只差一兩個(gè)小版本號(hào)但行為卻截然不同。1.3 為什么需要預(yù)編譯的Paddle Inference包可能有人會(huì)問(wèn)直接pip install paddlepaddle-gpu不就行了對(duì)于Python調(diào)用確實(shí)簡(jiǎn)單但C部署場(chǎng)景完全不同。首先C推理需要的是靜態(tài)庫(kù)和頭文件pip包里雖然有但接口不穩(wěn)定、沒(méi)有頭文件、不方便鏈接。其次Paddle Inference源碼編譯在Windows下極其痛苦要裝Python、CMake、VS2019、CUDA、cuDNN、TensorRT還要處理各種依賴沖突編譯一次少說(shuō)兩小時(shí)。預(yù)編譯包相當(dāng)于把這些都辦好你的任務(wù)只是“解壓 配置 鏈接”。從工程視角看預(yù)編譯包還能保證推理行為的一致性你自己編譯的庫(kù)可能因?yàn)榫幾g選項(xiàng)不同算出的結(jié)果有細(xì)微差異但官方預(yù)編譯的版本是統(tǒng)一優(yōu)化過(guò)的批量部署時(shí)更可控。2. 環(huán)境配置從零準(zhǔn)備CUDA 11.8、cuDNN和TensorRT2.1 Windows下安裝CUDA 11.8的完整步驟很多人在Windows裝CUDA時(shí)翻車主要原因是把“顯卡驅(qū)動(dòng)”和“CUDA Toolkit”混為一談。實(shí)際上如果你只是要跑現(xiàn)成的Paddle推理包NVIDIA驅(qū)動(dòng)里已經(jīng)包含了最低限度的CUDA運(yùn)行時(shí)兼容庫(kù)但頭文件、nvcc編譯器、開發(fā)庫(kù)必須額外裝Toolkit。第一步檢查顯卡驅(qū)動(dòng)。打開NVIDIA控制面板左下角“系統(tǒng)信息”里能看到驅(qū)動(dòng)版本。CUDA 11.8要求驅(qū)動(dòng)版本至少525.60.13如果驅(qū)動(dòng)太老后面加載cuda runtime的時(shí)候會(huì)報(bào)找不到入口點(diǎn)或版本不兼容。驅(qū)動(dòng)更新就直接去NVIDIA官網(wǎng)下載Game Ready或Studio驅(qū)動(dòng)都可以開發(fā)機(jī)建議用Studio驅(qū)動(dòng)穩(wěn)定性更好。第二步下載CUDA Toolkit 11.8。到NVIDIA官網(wǎng)的CUDA Toolkit Archive頁(yè)面選擇11.8版本W(wǎng)indows x86_64的exe安裝包大概2.8GB。安裝時(shí)選擇“自定義”把CUDA下的“Visual Studio Integration”選上其他組件默認(rèn)。注意安裝路徑不要有中文和空格我習(xí)慣用默認(rèn)的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8。第三步驗(yàn)證安裝。打開命令行cmd或PowerShell輸入nvcc -V如果正常輸出版本信息說(shuō)明Toolkit安裝成功。這里我遇到過(guò)一個(gè)問(wèn)題裝完CUDA后命令行輸入nvcc提示不是內(nèi)部或外部命令原因是沒(méi)有把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin加到系統(tǒng)環(huán)境變量PATH里。重新配置環(huán)境變量后重開命令行即可。還有一個(gè)非常常見(jiàn)的坑CUDA安裝的時(shí)候提示需要VS的某類組件如果你機(jī)器上裝的是VS2022而不是VS2019也沒(méi)關(guān)系CUDA 11.8對(duì)VS2022也有一定支持只是官方在VS2019下驗(yàn)證得最充分。Paddle這個(gè)包標(biāo)注VS2019不代表VS2022不能用只是建議盡量接近構(gòu)建環(huán)境減少鏈接時(shí)的小問(wèn)題。2.2 cuDNN 8.6.0下載與部署cuDNN的安裝比CUDA簡(jiǎn)單本質(zhì)上就是往CUDA目錄里放幾個(gè)文件。到NVIDIA cuDNN Archive頁(yè)面選擇Download cuDNN v8.6.0 for CUDA 11.xWindows版本下載得到一個(gè)zip壓縮包。解壓后里面有3個(gè)文件夾bin、include、lib。操作邏輯很直接把bin里的cudnn64_8.dll復(fù)制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bininclude里的cudnn.h復(fù)制到對(duì)應(yīng)的include目錄lib里的cudnn.lib復(fù)制到lib\x64目錄。復(fù)制的時(shí)候記得管理員權(quán)限。驗(yàn)證方式有兩個(gè)。第一查看C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin下是否存在cudnn64_8.dll第二在命令行執(zhí)行nvidia-smi如果驅(qū)動(dòng)正常再執(zhí)行一個(gè)小的CUDA樣本程序比如bandwidthTest.exe能通過(guò)就說(shuō)明CUDA環(huán)境沒(méi)問(wèn)題cuDNN因?yàn)槭莿?dòng)態(tài)庫(kù)只有真正跑深度學(xué)習(xí)推理時(shí)才會(huì)被調(diào)用。關(guān)于cuDNN我多說(shuō)一句版本號(hào)中數(shù)字的兼容性比你想象中嚴(yán)格。比如cuDNN 8.6.0生成的動(dòng)態(tài)庫(kù)名為cudnn64_8.dll其中“64_8”表示64位平臺(tái)、支持CUDA 11.x的API。如果你換成cudnn 8.9.x文件名可能會(huì)變成cudnn64_9.dll此時(shí)Paddle Inference編譯時(shí)鏈接的還是cudnn64_8這個(gè)導(dǎo)入庫(kù)運(yùn)行時(shí)就會(huì)報(bào)找不到dll。所以不要隨便升級(jí)cuDNN。2.3 TensorRT 8.5.1.7的安裝與環(huán)境配置TensorRT的安裝也是解壓式。到NVIDIA TensorRT Archive頁(yè)面下載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包解壓到一個(gè)你方便找到的路徑比如D:\TensorRT-8.5.1.7。TensorRT包里面包括bin目錄trtexec等工具、include目錄頭文件、lib目錄dll和導(dǎo)入庫(kù)、還有python包目錄。我們的核心任務(wù)是把lib目錄加入PATH或者把dll復(fù)制到安全位置。Paddle Inference運(yùn)行時(shí)加載TensorRT是動(dòng)態(tài)加載的它會(huì)在默認(rèn)路徑和PATH中查找nvinfer.dll、nvonnxparser.dll等文件。所以最簡(jiǎn)單的方法是把D:\TensorRT-8.5.1.7\lib加到系統(tǒng)環(huán)境變量PATH里并確保在PATH中的位置比較靠前。如果你在開發(fā)機(jī)上不想污染全局環(huán)境也可以在做CMake工程時(shí)通過(guò)cmake變量把TensorRT路徑傳進(jìn)去運(yùn)行exe前在腳本里加一下PATH。TensorRT還有個(gè)小坑它在運(yùn)行時(shí)需要額外的CUDA驅(qū)動(dòng)支持如果你用了精簡(jiǎn)版驅(qū)動(dòng)或者老驅(qū)動(dòng)初始化TensorRT時(shí)會(huì)卡在加載cudart64_11.dll。所以再次確認(rèn)驅(qū)動(dòng)版本別低于525.60.13。2.4 驗(yàn)證整套環(huán)境是否匹配在開始寫代碼之前先用最簡(jiǎn)單的方式驗(yàn)證一下環(huán)境。打開命令行依次執(zhí)行nvcc -V確認(rèn)CUDA 11.8。where cudnn64_8.dll如果能找到路徑說(shuō)明cuDNN在PATH里。where nvinfer.dll確認(rèn)TensorRT核心庫(kù)可見(jiàn)。另外可以用TensorRT自帶的trtexec工具做一次快速自檢比如加載一個(gè)ONNX模型轉(zhuǎn)成engine能跑通說(shuō)明TensorRT初始化正常D:\TensorRT-8.5.1.7\bin\trtexec.exe --onnxyour_model.onnx --saveEnginetest.engine如果這個(gè)命令報(bào)錯(cuò)先別查Paddle大概率是TensorRT環(huán)境本身的問(wèn)題早點(diǎn)發(fā)現(xiàn)早點(diǎn)排查。整個(gè)環(huán)境配置下來(lái)我的經(jīng)驗(yàn)是能不改系統(tǒng)PATH就盡量不改所有的依賴庫(kù)通過(guò)拷貝dll到指定目錄的方式管理項(xiàng)目可控性更高。但既然做開發(fā)PATH方式最省事二選一即可。3. Paddle Inference 3.0.0的工程集成與推理實(shí)現(xiàn)3.1 解壓并理解預(yù)編譯包的目錄結(jié)構(gòu)把下載的zip解壓后你會(huì)看到類似這樣的目錄結(jié)構(gòu)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 └── ...重點(diǎn)在于paddle/include和paddle/lib。頭文件放的是C API聲明庫(kù)文件放的是導(dǎo)入庫(kù)和動(dòng)態(tài)庫(kù)。third_party目錄里通常會(huì)有Paddle依賴的第三方庫(kù)但實(shí)際運(yùn)行時(shí)大多數(shù)還需要系統(tǒng)環(huán)境的CUDA、cuDNN等別指望這個(gè)目錄里的文件能替代你手動(dòng)安裝的CUDA Toolit。version.txt里會(huì)寫明精確的構(gòu)建信息建議打開看一眼確認(rèn)跟你理解的版本一致。在Windows下用VS2019建工程時(shí)配置包含目錄為paddle/include庫(kù)目錄為paddle/lib并且把paddle_inference.dll、paddle2ONNX.dll等動(dòng)態(tài)庫(kù)拷貝到exe輸出目錄或放到PATH可達(dá)的位置。否則編譯能過(guò)運(yùn)行就報(bào)找不到paddle_inference.dll。3.2 最小CMake工程配置我習(xí)慣用CMake來(lái)管理Windows下的C工程比直接手寫.vcxproj方便。下面是我驗(yàn)證過(guò)可用的CMakeLists.txt模板針對(duì)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如果推理時(shí)想用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還需要關(guān)注paddle2onnx依賴但鏈接paddle_inference時(shí)通常會(huì)自動(dòng)帶 )這里要特別說(shuō)明兩點(diǎn)。第一CMake的link_directories在Windows下有時(shí)不生效因?yàn)镸SVC在鏈接時(shí)更依賴具體的庫(kù)文件路徑。遇到“找不到paddle_inference.lib”的情況最省事的辦法是在target_link_libraries里寫全路徑target_link_libraries(paddle_demo ${PADDLE_INFER_DIR}/paddle/lib/paddle_inference.lib )第二Release模式必須和Release模式匹配。Paddle的預(yù)編譯庫(kù)一般是Release版如果你用Debug配置去鏈接大概率會(huì)在運(yùn)行時(shí)出現(xiàn)無(wú)法解析的外部符號(hào)或堆損壞因?yàn)镸SVC的運(yùn)行時(shí)庫(kù)/MD和/MTd不同。3.3 編寫一份能正常加載PIR模型的C推理代碼Paddle Inference 3.0.0的API和2.x有些變化核心頭文件是paddle_inference_api.h。下面是一個(gè)最基礎(chǔ)的單模型GPU推理示例流程是創(chuàng)建Config - 配置模型路徑 - 啟用GPU - 創(chuàng)建Predictor - 構(gòu)造輸入 - Run - 讀取輸出。#include iostream #include vector #include paddle_inference_api.h int main() { // 1. 創(chuàng)建AnalysisConfig paddle_infer::Config config; // 假設(shè)模型是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顯存預(yù)分配大小MB參數(shù)2GPU設(shè)備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模式下此選項(xiàng)一般無(wú)效 // config.EnableMKLDNN(); // 5. 創(chuàng)建Predictor auto predictor paddle_infer::CreatePredictor(config); // 6. 獲取輸入輸出張量的名稱 auto input_names predictor-GetInputNames(); auto output_names predictor-GetOutputNames(); // 7. 構(gòu)造輸入 auto input_tensor predictor-GetInputHandle(input_names[0]); // 假設(shè)輸入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方式存在隱患因?yàn)閛utput_data沒(méi)有預(yù)分配空間。 // 更穩(wěn)妥的方式是先獲取shape再分配內(nèi)存 // 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; }這段代碼有幾個(gè)細(xì)節(jié)容易踩坑。首先GetOutputHandle之后一定要先調(diào)用shape()獲取輸出維度再給vector分配空間最后CopyToCpu。如果直接CopyToCpu到一個(gè)空vector會(huì)觸發(fā)訪問(wèn)越界或只拷出一部分?jǐn)?shù)據(jù)。我在實(shí)際項(xiàng)目中遇到過(guò)輸出數(shù)據(jù)全0的情況排查半天發(fā)現(xiàn)是vector沒(méi)resizeCopyToCpu只寫了應(yīng)該寫的長(zhǎng)度但程序讀取越界了。其次Config.EnableUseGpu的第一個(gè)參數(shù)是顯存預(yù)分配大小這個(gè)值不是硬性限制Paddle會(huì)在需要時(shí)繼續(xù)申請(qǐng)但預(yù)分配越大運(yùn)行中顯存碎片化越少越不容易因?yàn)轱@存不足報(bào)錯(cuò)。一般圖像分類模型給1024就夠檢測(cè)或分割模型給2048以上。另外Paddle的模型文件有兩種一種是舊版的__model__和params文件另一種是新版的.pdmodel和.pdiparams。3.0.0的接口對(duì)舊版也有兼容但我建議統(tǒng)一用新版格式保存模型時(shí)用paddle.jit.save。3.4 理解Paddle Inference的模型加載機(jī)制你可能會(huì)問(wèn)模型文件到底放在哪程序怎么知道網(wǎng)絡(luò)結(jié)構(gòu)這其實(shí)是“靜態(tài)圖”和“動(dòng)態(tài)圖”的問(wèn)題。訓(xùn)練時(shí)用的是動(dòng)態(tài)圖方便調(diào)試保存推理模型時(shí)用的是靜態(tài)圖把計(jì)算邏輯固化下來(lái)。.pdmodel文件就是序列化后的靜態(tài)計(jì)算圖包含所有算子和權(quán)重.pdiparams是權(quán)重文件。Paddle Inference加載模型時(shí)會(huì)做一系列圖優(yōu)化比如算子融合、常量折疊這些優(yōu)化由一系列pass組成。你可以通過(guò)config.SwitchIrOptimization(true)或false來(lái)開啟或關(guān)閉。我建議默認(rèn)開啟尤其是在GPU TensorRT模式下圖優(yōu)化對(duì)性能影響很大。有時(shí)你會(huì)在日志里看到類似“I1125 09:00:01.123456 12345 analysis_predictor.cc:99] Optimize to PaddlePredictor...”的信息這說(shuō)明圖優(yōu)化生效了。如果模型加載后推理結(jié)果不對(duì)可以試著SwitchIrOptimization(false)跑一遍對(duì)比結(jié)果看是不是優(yōu)化pass引入的問(wèn)題。4. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 用C跑通一個(gè)圖像分類模型的全流程實(shí)錄為了減少變量我用PaddleClas里的MobileNetV3作為示例模型流程如下。第一準(zhǔn)備模型。如果你手頭沒(méi)有Paddle模型可以用一行Python代碼導(dǎo)出一個(gè)示例模型import paddle import paddle.vision.models as models model models.mobilenet_v3_small(num_classes1000) model.eval() # 構(gòu)造一個(gè)示例輸入用于固定輸入shape input_spec [paddle.static.InputSpec(shape[-1, 3, 224, 224], dtypefloat32, nameinput)] paddle.jit.save(model, mobilenetv3, input_specinput_spec, output_specNone)這樣會(huì)生成mobilenetv3.pdmodel和mobilenetv3.pdiparams兩個(gè)文件。第二把模型文件放好。我在D盤建了一個(gè)項(xiàng)目目錄結(jié)構(gòu)是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目錄下會(huì)生成paddle_demo.exe。執(zhí)行前確保paddle_inference.dll、cudnn64_8.dll、nvinfer.dll等動(dòng)態(tài)庫(kù)都能被找到最保險(xiǎn)的做法是寫一個(gè)bat腳本把這些dll全部復(fù)制到exe同目錄下或者啟動(dòng)前臨時(shí)設(shè)置PATH。第四運(yùn)行。程序跑起來(lái)后觀察輸出日志如果能看到Paddle版本信息和模型加載日志基本就通了。遇到問(wèn)題時(shí)先看日志尾部錯(cuò)誤碼Paddle的錯(cuò)誤碼通常帶有EROR或FATAL字樣直接定位。4.2 CPU推理與MKLDNN的配置細(xì)節(jié)GPU在大多數(shù)服務(wù)器上都有但開發(fā)調(diào)試階段CPU推理反而更常用。Paddle Inference在x86平臺(tái)上開啟MKLDNN即oneDNN前身是MKL-DNN后CPU算子的性能提升非常明顯尤其是卷積和矩陣乘。開啟方式非常簡(jiǎn)單config.EnableMKLDNN(); config.SetCpuMathLibraryNumThreads(8);SetCpuMathLibraryNumThreads用于設(shè)置CPU線程數(shù)默認(rèn)是物理核心數(shù)。這個(gè)值不是越大越好因?yàn)榫€程切換和內(nèi)存帶寬都會(huì)成為瓶頸我實(shí)測(cè)8線程左右對(duì)大部分模型性價(jià)比最高。多路CPU的服務(wù)器可能會(huì)更復(fù)雜建議按模型benchmark去搜一下最佳線程數(shù)。MKLDNN模式下Paddle會(huì)自動(dòng)把部分算子替換為oneDNN實(shí)現(xiàn)圖優(yōu)化中也會(huì)多做一層算子融合。還有一個(gè)附加開關(guān)是EnableMKLDNNQuantizer用于INT8量化但一般需要校準(zhǔn)數(shù)據(jù)集工程上用得少。4.3 TensorRT加速的完整開啟方式與參數(shù)選擇TensorRT是GPU推理的核心加速手段。在上面示例代碼里我用了EnableTensorRtEngine但這里有幾個(gè)參數(shù)值得單獨(dú)展開。第一個(gè)參數(shù)workspace_size單位是字節(jié)它表示TensorRT允許使用的顯存上限。設(shè)置太大可能會(huì)因?yàn)轱@存不足導(dǎo)致TensorRT初始化失敗設(shè)置太小TensorRT因?yàn)闊o(wú)法執(zhí)行某些優(yōu)化策略性能會(huì)打折扣。我的習(xí)慣是把值設(shè)為顯存大小的三分之一到二分之一比如8GB顯存就設(shè)1GB到2GB左移30位是1GB。第二個(gè)參數(shù)batch_size這是“最優(yōu)batch數(shù)”等于1表示主要優(yōu)化batch1的推理。如果你的業(yè)務(wù)并發(fā)batch是固定的比如batch8這里最好設(shè)置為8TensorRT會(huì)依據(jù)這個(gè)size做kernel選擇。第三個(gè)參數(shù)min_subgraph_size這是子圖融合的最小節(jié)點(diǎn)數(shù)。Paddle會(huì)把支持TensorRT的算子組合成子圖子圖內(nèi)的算子在TensorRT上執(zhí)行子圖外的算子留在Paddle上。min_subgraph_size太小時(shí)一個(gè)單獨(dú)的算子也會(huì)被調(diào)去TensorRT性能反而下降因?yàn)榇罅啃∷阕訒?huì)有額外傳輸開銷太大會(huì)導(dǎo)致TensorRT覆蓋的算子太少加速效果不明顯。官方默認(rèn)值一般在3到5實(shí)踐下來(lái)10左右比較均衡。PrecisionType可以選擇kFloat32、kHalf、kInt8。如果對(duì)精度要求較高比如醫(yī)療圖像用kFloat32對(duì)性能敏感但精度容忍度還行用kHalf也就是FP16。kInt8需要額外校準(zhǔn)數(shù)據(jù)前向inference時(shí)還需要在use_calib_mode參數(shù)設(shè)為true否則可能報(bào)錯(cuò)。另外TensorRT支持序列化engine文件即靜態(tài)engine可以避免每次啟動(dòng)都重新構(gòu)建engine。Paddle里對(duì)應(yīng)的是config.EnableTensorRtEngine時(shí)設(shè)置use_statictrue這樣會(huì)把優(yōu)化后的engine緩存到本地文件下次啟動(dòng)直接加載。這個(gè)緩存跟模型、輸入shape、TensorRT版本、顯卡型號(hào)都強(qiáng)相關(guān)換環(huán)境或改shape之后一定要?jiǎng)h除緩存否則會(huì)報(bào)“inconsistency”錯(cuò)誤。4.4 動(dòng)態(tài)Shape場(chǎng)景下的TensorRT配置很多實(shí)際部署場(chǎng)景比如檢測(cè)模型的輸入shape是動(dòng)態(tài)的例如一張圖可以是大是小。TensorRT對(duì)動(dòng)態(tài)shape支持得比靜態(tài)shape復(fù)雜需要在配置時(shí)顯式指定三個(gè)維度范圍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是對(duì)應(yīng)shape。舉個(gè)栗子一個(gè)[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}}};這個(gè)配置決定了TensorRT在運(yùn)行時(shí)能接受的輸入范圍。如果輸入超出了max_shape直接會(huì)報(bào)維度錯(cuò)誤如果輸入在min和max之間TensorRT會(huì)嘗試在opt_shape附近做優(yōu)化所以opt值要盡量接近你的真實(shí)輸入尺寸分布中心。動(dòng)態(tài)shape還帶來(lái)一個(gè)隱性風(fēng)險(xiǎn)子圖劃分策略在不同shape下可能不同導(dǎo)致同一個(gè)算子有時(shí)在TensorRT里、有時(shí)在Paddle里執(zhí)行表現(xiàn)出的性能差異較大。所以線上服務(wù)如果輸入尺寸波動(dòng)很大建議還是固定到幾個(gè)離散的尺寸規(guī)格比如通過(guò)resize統(tǒng)一到448x448或960x960穩(wěn)定性和性能都更好。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 常見(jiàn)錯(cuò)誤速查表我把實(shí)際部署中遇到的錯(cuò)誤整理成一張表方便大家對(duì)照排查。錯(cuò)誤現(xiàn)象可能原因解決方案運(yùn)行時(shí)提示找不到paddle_inference.dll動(dòng)態(tài)庫(kù)路徑未加入PATH把paddle/lib加到PATH或拷貝dll到exe目錄提示找不到cudnn64_8.dllcuDNN未安裝或版本不匹配檢查bin目錄下是否存在cudnn64_8.dll復(fù)制到系統(tǒng)PATH初始化GPU時(shí)卡死或報(bào)cudaErrorInsufficientDriver顯卡驅(qū)動(dòng)版本過(guò)低更新驅(qū)動(dòng)至525.60.13以上編譯時(shí)無(wú)法解析paddle::AnalysisConfig鏈接庫(kù)時(shí)找不到paddle_inference.lib檢查CMake鏈接的lib路徑是否寫對(duì)用絕對(duì)路徑最穩(wěn)運(yùn)行時(shí)報(bào)非法指令I(lǐng)llegal instructionCPU不支持AVX指令集換成支持AVX的機(jī)器或下載noavx版本TensorRT engine初始化失敗TensorRT DLL版本不匹配確認(rèn)nvinfer.dll版本為8.5.1.x且CUDA版本是11.8推理結(jié)果全是0或NaNvector未正確分配空間或輸入數(shù)據(jù)異常檢查輸出tensor的shape分配空間后再CopyToCpu顯存不足CUDA out of memory顯存被其他進(jìn)程占用或workspace_size過(guò)大減小EnableUseGpu的預(yù)分配或關(guān)閉其他GPU進(jìn)程日志中出現(xiàn)算子不支持TensorRT當(dāng)前模型某些算子無(wú)法被TensorRT識(shí)別調(diào)大min_subgraph_size讓不支持的算子留在Paddle里執(zhí)行注意這張表只覆蓋了最常見(jiàn)的問(wèn)題。實(shí)際上Windows環(huán)境的問(wèn)題千奇百怪比如殺毒軟件刪dll、動(dòng)態(tài)庫(kù)搜索路徑失效、顯卡驅(qū)動(dòng)被系統(tǒng)更新覆蓋等等遇到問(wèn)題時(shí)先冷靜逐層排查。5.2 DLL加載順序的坑與解決方案Windows加載動(dòng)態(tài)庫(kù)的順序是exe所在目錄 - 系統(tǒng)目錄 - system32 - PATH環(huán)境變量。這帶來(lái)一個(gè)問(wèn)題如果系統(tǒng)里殘留了舊版本的cuda DLL或cudnn DLLPaddle可能會(huì)加載到錯(cuò)誤的版本導(dǎo)致莫名其妙的行為。我遇到過(guò)的一個(gè)典型案例機(jī)器上裝了Anacondaconda環(huán)境里有自己的一套cudnn加上Paddle的third_party目錄里也有一份dll還有系統(tǒng)裝的CUDA 11.8三份dll一起出現(xiàn)程序運(yùn)行時(shí)根本不知道加載了哪一份。解決方法是在啟動(dòng)exe的bat腳本里顯式把Paddle依賴的DLL目錄放到PATH最前面同時(shí)把conda的Library\bin挪到后面。更激進(jìn)的做法是把工程需要的dll全部拷貝到exe目錄做到一個(gè)目錄全含。另外TeamViewer等遠(yuǎn)程軟件或圖形驅(qū)動(dòng)會(huì)注入一部分庫(kù)到進(jìn)程中這類庫(kù)跟CUDA本無(wú)關(guān)系但偶爾會(huì)改變DLL搜索路徑優(yōu)先級(jí)。遇到玄學(xué)問(wèn)題可以先在干凈環(huán)境下測(cè)試。5.3 顯存不足與顯存碎片化的排查思路GPU推理的顯存管理是個(gè)經(jīng)典問(wèn)題。Paddle Inference默認(rèn)用緩存分配器預(yù)分配顯存后不會(huì)馬上歸還給驅(qū)動(dòng)這跟訓(xùn)練框架類似。在EnableUseGpu里指定的第一個(gè)參數(shù)就是預(yù)分配大小。顯存不足的常見(jiàn)情況推理進(jìn)程啟動(dòng)很慢顯存占用持續(xù)上漲最終報(bào)CUDA out of memory。這時(shí)候先確認(rèn)是不是有多個(gè)GPU進(jìn)程在跑Windows下可以用nvidia-smi查看GPU占用。如果只有一個(gè)進(jìn)程看看是不是模型過(guò)大或者TensorRT構(gòu)建engine時(shí)臨時(shí)分配了大量顯存。有時(shí)候訓(xùn)練和推理共用GPU也會(huì)導(dǎo)致沖突。比如顯存只有6GB訓(xùn)練任務(wù)占了5.5GB推理任務(wù)只有500MB可用任何模型都會(huì)OOM。建議配置GPU隔離Windows下一般用環(huán)境變量CUDA_VISIBLE_DEVICES來(lái)切換但注意這個(gè)變量在多進(jìn)程場(chǎng)景下要提前設(shè)置好別在代碼里改。如果你想在推理進(jìn)程退出時(shí)完整釋放顯存Paddle提供了paddle_infer::Predictor::ClearInterpreter之類的方法但更實(shí)用的做法是直接調(diào)用config.EnableMemoryOptim(true)開啟內(nèi)存優(yōu)化。這個(gè)選項(xiàng)讓Paddle在算子執(zhí)行前后復(fù)用顯存峰值占用能明顯下降但代價(jià)是增加一點(diǎn)調(diào)度開銷實(shí)際推理性能幾乎無(wú)影響。5.4 多模型加載與單例Predictor的設(shè)計(jì)建議實(shí)際項(xiàng)目里很少只跑一個(gè)模型通常會(huì)同時(shí)加載多個(gè)模型或者同一個(gè)模型多個(gè)實(shí)例。Paddle每個(gè)Predictor對(duì)應(yīng)一份模型實(shí)例它們之間的顯存和線程是獨(dú)立的所以要注意整體資源控制。我比較推薦的做法是每個(gè)模型建立一個(gè)Predictor池池的大小根據(jù)并發(fā)請(qǐng)求確定。Predictor本身不是線程安全的多個(gè)線程并發(fā)執(zhí)行Run可能會(huì)有問(wèn)題最安全的方式是每個(gè)線程持有自己的Predictor實(shí)例。Paddle內(nèi)部有一些線程池和常量?jī)?yōu)化如果你有很多Predictor實(shí)例每個(gè)實(shí)例都會(huì)初始化一遍圖優(yōu)化和算子顯存和CPU開銷會(huì)翻幾倍。解決辦法是提前構(gòu)建好TensorRT靜態(tài)engine并緩存避免重復(fù)構(gòu)建。還有一種方案是把多模型融合成一個(gè)模型在某些場(chǎng)景下可行但通用性不高。實(shí)際操作中我通常把模型按業(yè)務(wù)模塊拆分用獨(dú)立的Predictor管理類統(tǒng)一控制生命周期在服務(wù)啟動(dòng)時(shí)預(yù)加載避免運(yùn)行時(shí)頻繁創(chuàng)建銷毀。6. 性能調(diào)優(yōu)從能用變成好用6.1 CPU與GPU推理的取舍很多人拿到Paddle Inference就默認(rèn)用GPU其實(shí)小模型在CPU上可能更快。這涉及一個(gè)基礎(chǔ)概念GPU的延遲不一定比CPU低但吞吐量遠(yuǎn)高于CPU。對(duì)于batch1的低延遲場(chǎng)景CPU可能反而有優(yōu)勢(shì)因?yàn)椴恍枰截悢?shù)據(jù)到GPU。所以如果你的模型很小比如幾百M(fèi)B的輕量模型且請(qǐng)求量不大CPU推理就夠了MKLDNN開啟后性能也很可觀。跑benchmark時(shí)我習(xí)慣于反復(fù)預(yù)熱后再計(jì)時(shí)因?yàn)镃UDA運(yùn)行時(shí)、TensorRT engine構(gòu)建、Paddle圖優(yōu)化這些都會(huì)在第一次推理時(shí)發(fā)生導(dǎo)致第一次很慢。Paddle也提供了config.SwitchIrOptimization(true)和預(yù)熱循環(huán)的配合用10到20次無(wú)關(guān)推理把運(yùn)行時(shí)狀態(tài)跑熱再統(tǒng)計(jì)真實(shí)延遲。6.2 TensorRT與Paddle算子融合的細(xì)節(jié)觀察當(dāng)啟用TensorRT引擎時(shí)Paddle并不會(huì)把所有算子全部交給TensorRT而是先做圖分析把支持的部分切成子圖再交給TensorRT。這意味著最終推理圖可能是“Paddle原生算子 TensorRT子圖”混合的。如果你想知道哪些子圖被切到了TensorRT可以打開調(diào)試日志config.EnableDebug(); config.SwitchIrDebug(true);日志里會(huì)打印pass執(zhí)行情況包括每個(gè)子圖的算子數(shù)量、輸入輸出張量。我常常通過(guò)這個(gè)日志判斷為什么某些模型TensorRT加速效果不明顯——往往是因?yàn)榍谐鰜?lái)的子圖太小TensorRT根本來(lái)不及發(fā)揮優(yōu)化能力。一個(gè)模型如果全是卷積和pooling子圖會(huì)非常大TensorRT加速效果顯著。如果模型里有大量自定義算子、控制流if/loop或動(dòng)態(tài)shape操作子圖會(huì)被切得很碎加速效果大打折扣。這不算錯(cuò)誤只是性能優(yōu)化的約束條件。6.3 顯存預(yù)分配、緩存與批處理的高級(jí)調(diào)優(yōu)對(duì)于高吞吐場(chǎng)景比如推薦系統(tǒng)或者視頻流處理盡量使用batch推理。Paddle Inference支持動(dòng)態(tài)batch但你需要手動(dòng)拼接輸入數(shù)據(jù)。一張一張推理和批量推理吞吐量差距可能達(dá)到5到10倍尤其是GPU上。一個(gè)常見(jiàn)的誤區(qū)把batch設(shè)得越大越好。實(shí)際上batch太大TensorRT在kernel選擇時(shí)會(huì)傾向并行度更高的策略但模型本身有內(nèi)存帶寬限制超過(guò)某個(gè)閾值后吞吐不再增長(zhǎng)反而會(huì)因?yàn)轱@存不足報(bào)錯(cuò)。我一般用nvidia-smi看顯存殘量找到batch的上界。還可以考慮多流推理。Paddle對(duì)單卡多流的支持比較有限但你可以自己開多個(gè)線程每個(gè)線程一個(gè)Predictor分別跑不同的batch間接實(shí)現(xiàn)多流并行。這種情況下要注意所有Predictor共享同一塊GPU顯存總量要精打細(xì)算。6.4 從Windows到Linux的遷移注意事項(xiàng)雖然本文圍繞Windows展開但很多生產(chǎn)服務(wù)器是Linux。Paddle Inference的Linux預(yù)編譯包同樣有對(duì)應(yīng)的版本遷移時(shí)主要注意幾個(gè)點(diǎn)。第一動(dòng)態(tài)庫(kù)后綴不同。Windows是dllLinux是so。代碼里不要硬編碼路徑盡量用配置或相對(duì)路徑。第二Linux下cuDNN和TensorRT的安裝路徑不同通常用軟鏈接管理版本。第三CUDA的運(yùn)行時(shí)庫(kù)搜索路徑是rpath和LD_LIBRARY_PATH需要導(dǎo)出環(huán)境變量。第四Linux下沒(méi)有Visual Studio但GCC/G版本要跟預(yù)編譯包要求對(duì)應(yīng)一般Paddle官方推薦GCC 8.2以上的版本。我個(gè)人的建議是Windows版用于本地開發(fā)和單機(jī)驗(yàn)證一旦確認(rèn)模型和推理邏輯無(wú)誤就用Linux版部署到服務(wù)器。因?yàn)閃indows和Linux的TensorRT engine緩存不通用正式環(huán)境用Linux的包重新構(gòu)建一次engine緩存才能保證最優(yōu)性能。7. 寫在最后的經(jīng)驗(yàn)之談這套Paddle Inference環(huán)境我已經(jīng)在好幾個(gè)項(xiàng)目里用過(guò)了一個(gè)非常深刻的感受是版本對(duì)齊就是最大的坑但也是最好解決的問(wèn)題。只要你嚴(yán)格按照CUDA 11.8 cuDNN 8.6.0 TensorRT 8.5.1.7 VS2019這套組合去裝依賴版本兼容性問(wèn)題會(huì)少很多。反而是那些“順便升級(jí)一下”的操作比如把cuDNN從8.6升到8.9、把TensorRT從8.5升到8.6容易引發(fā)各種dll不匹配。另外一個(gè)心得是不要過(guò)度依賴預(yù)編譯包里自帶的third_party目錄。它只是把Paddle需要的一些第三方庫(kù)打個(gè)包方便你不用單獨(dú)下載MKL之類的東西但CUDA和cuDNN這種重量級(jí)依賴還是得你手動(dòng)裝好把環(huán)境弄得干凈可控才是正道。如果你把這個(gè)zip當(dāng)成“解壓就能用”的黑盒那多半會(huì)遇到一堆問(wèn)題。但如果把它當(dāng)成“Paddle Inference的Windows版本參考實(shí)現(xiàn)”對(duì)照著它的編譯選項(xiàng)去配置自己的環(huán)境很多問(wèn)題就能系統(tǒng)性地避開。我一般會(huì)在項(xiàng)目里寫一個(gè)configure.bat把PATH、MKL、TensorRT、CUDA的路徑全部設(shè)置好每次開新終端都執(zhí)行一遍比手動(dòng)改環(huán)境變量穩(wěn)定多了。最后再提一個(gè)小技巧在Windows上萬(wàn)一遇到奇怪崩潰先試試把Compile with AVX對(duì)應(yīng)的運(yùn)行庫(kù)CPU指令集匹配問(wèn)題排除掉老的CPU比如一些低功耗的奔騰、賽揚(yáng)真的可能不支持AVX換成noavx版本的Paddle Inference包會(huì)立刻解決。這個(gè)坑我?guī)屯屡挪檫^(guò)兩次每次都是CPU硬件太老不是代碼的問(wèn)題。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷丁香五月视频| 亚洲国产精品二二三三区| 亚洲AV成人在线| 天天情色综合网| 在线看九一V图片| 丁香蜜臀黄色婷婷五月天| 久色大| 啪啪五月婷婷| 亚洲av网站在线观看| 久久96热| 久久精品性爱视频,| 久久伊人大香蕉| 婷婷五月综合啪| 99成人精品| 国产肥白大熟妇BBBB视频| 美英法精品无码免费视频| 99re6在线视频精品免费| 色婷婷五月天激情| 香蕉五月婷婷| 欧美内射AA| 欧美啄木乌丝袜人妻系列| 国产9色在线/日韩| 啪啪色激情五月天| 激情五月综合色婷婷| 婷婷综合在线| 日韩爱操视频| 99在线观看亚洲| 久久日曰| 久久色情| 五月天婷婷成人网| 婷婷色丁香五月| 伊人玖玖网| 色噜噜狠狠插综合| 国产精品美女久久久久AV超清| 丁香婷婷五月天色综合| 播五月婷婷开心| www五月| 五月天婷婷青青| 荫道BBWBBB高潮潮喷| 亚洲成色综合网站免费观看| 日本色色影院| 五月丁香六月激情综合| 色婷婷小说网| 综合五月丁香六月婷婷| 欧美性色视频| 六月丁香视频网站| 久久婷婷内射| 亚洲精品九九| 日韩无码系列| 麻豆123区| 日韩ww| 97五月久久丁香婷婷| 久婷婷色| 欧美婷婷六月丁香综合色连续高潮抽搐| 亚洲成人高清在线| AAA久久久| 99热成人精品| 热婷婷久| 99精品自拍视频| 综合色色五月| 国产精产国品一二三在观看| 狼人婷婷久久| 婷婷五月天在线观看| 五月婷婷六月丁香激情| 激情五月少妇| 天天爽天天爽| 天天日天天爽夜夜爽| 99精品免费欧美小视频 | 五月丁香啪啪综合| 色噜噜伊人| 激情爱爱网站超大免费| 五月婷A V在线| 超碰renrenai| 色999亚洲人成色| 秋霞影音91人妻久久| 日本无va视频| 六月丁香婷婷综合在线| 六月婷婷色综合| 激情小说五月天| 国产操逼视频网站| 91色情播放| 深爱激清网| 天天爽天天弄| 九九热免费视频| 日本精品99网站| 99热这里只有精品2| 精品99在线观看| 国产五月天欧美色| 色色a| 日韩 中文 欧美| 成人五月天丁香| 婷婷中文字幕| 91好好热日本在线| 日本va视频| 五月天婷婷社区| 思思热视频| 亚洲色久| 东京热人妻一区二区三区在线| 中文字幕在线免费看线人| 久热只有这里有精品| 九九综合视频在线观看| 国产日韩欧美性爱| 亚洲mm免费| www久视频com| 第四色大香蕉| 米奇影视五月天| 快色t v在线入口| 人人操91| 99热在线中文字幕| 亚洲激情五月| 夜夜爽天天日| 思思精品视频| 日日夜夜狠狠| 亚洲成人在线观看网址| 日本三级韩三级99久久| 狠狠擼综合| 五月丁香六月婷婷在线| 国产精产国品一二三在观看| 丁香婷婷网| 五月停停丁香| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 日韩欧美老妇性视频91久久久| 免费无码毛片一区二区A片 | 亚洲综合五月| 激情色色| 六月婷婷影院| 人妻内射一区二区在线视频| 五月丁香手机在线| 天天日夜夜爽| 日韩色色色99| 色综合99| 99热国产这里只有| 99热久| 996er热| sS丁香五月婷婷| 精a品a| 国产成人精品一区二区三区视频| 人妻性操逼中文字幕 国产| AAAA亚洲| 狠狠五月激情丁香六月| 亚洲一区二区无遮挡A片| 五月宗合激情网| 江苏少妇性BBB搡BBB爽爽爽 | 。久久久久久久久久久久久久人妻 | 超碰97久久| 久久人妻伊人| 欧美日本高清视频99| 日日做夜夜爱| 激情婷婷视频在线| 亚洲瑟瑟精品在线| 伊人久久婷| 干一干xxxx| 特级片神马电影| 99热在线观看| 情五月亚洲婷婷| 玖玖热视频| 91seAV| 亚洲综合视频天天精品| 婷婷丁香五月天中文字幕| 人人色人人摸人人看| 婷婷五月亚洲综合| 开心婷婷五月激情网小说| 99精品国产热久久91色欲| 伊人大蕉香| 丁香久久久| 色吧网91| 人妻操逼| 丁香婷婷欧美综合| 可以直接看的av网站| 五月色情婷婷开心五月色情| 26uuu亚洲色| www.五月天| 婷婷综合色色| 五月婷婷综合性爱噜噜| 99九九玖玖| Caop在线| 午夜不卡久久精品无码免费| 久久久999精品| 五月六月婷婷| 色播婷婷五月天| 91超级碰| 婷婷五月黄色激情在线| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久久激情| 激情丁香五月天图片| 婷婷日本在线| 性色五月天| 婷婷五月天国产手机在线视频观看| 精品夜夜澡人妻无码AV| 色婷婷亚洲婷婷| 久热超碰| 五月成人网站| 国产成人精品一区二三区熟女在线| 掩去也综合五月视频| 五月丁香无码| 五月天激情图| 婷婷色综合| 久久九网| 激情四射五月天| 欧美综合五月丁香五月天| 97精品综合| 亚洲av网址| 久久婷五月| 思思热热久久| 99精品视频免费在线播放| 综合AV网| 日本色婷婷| 丁香六月色婷婷| 九九久久99精品免费观看www| 婷婷色播婷婷| 99无码黄色视频| 色色激情五月天| 伊人丁香五月| 九玖视频这里只有精品| 六月婷欧美| 日本色色影片| 五月综合激情网| 国产精品热搜丁香五月婷婷| 色婷成人狠干| 丁香五月婷婷Av| 五月天色色激情综合| 成年AAAA色情| 欧美激情凹凸丁香网| 欧美Va婷色| 五月天俺去也| 色碰碰| 色婷婷五月丁香色| 国产精品成人av在线观看春天| 高清国产一级婬片a免费| 日本久久精品| 天天操夜夜啊| 亚洲色夜| 激情五月综合网| 五月色婷婷影视在线电影| 99久久九九| 婷婷五月天欧美图片在线播放电驴| 精品人妻在线| 日韩黄色中文字幕| 国产亚洲精品AAAAAAA片| 五月天成人在线播放| 五月丁香色五月| 免费黄色视频网址| 欧亚洲在线高清视频| 国产精品人妻在线网址| 欧美超碰人人| 色九亚洲| 激情综合啪啪| 丁香综合婷婷开心激情网| 国产免费av在线| 婷婷性爱综合| 台湾无码A片一区二区| 色综合色色| 婷婷狠狠操| 久久久精品人妻录| 日韩欧美一级大黄网站| 天天干夜夜谢| 国産精品| 久草久青福利| 狠狠色婷婷7777久| 色婷婷影视| 丁香五月天啪啪| 日本色天堂| 俺去也婷婷| 六月婷婷开心| 成人AV在线网站| 97婷婷狠狠| 手机旧版看人妻1025| 无遮羞AV| 色色亚洲无码| 狠狠色丁婷婷日日,伊人激情综合网| 亚洲色啪| 综合色图婷婷| 九九色天堂| 淫五月停停| 激情五月视频| 色播五月网| 久久小说| 中文字幕av网站| 香蕉大综综综合久久| 婷婷色五月天色| 99热丁香| 五月丁香999| 襙逼网| 伊人色欲五月天| 色婷婷丁香香香蕉视频| 国产avapp 网| 极品少妇XXXX精品少妇偷拍| 青青草网武则天| 九九热99视频在线| 国产日日夜夜操| 亚洲综合热| 亚洲va成人va成人va在线观看| 超碰在线免费9| 天天爽夜夜操| 91人人看| 激情婷婷内射| 九九综合| 国产又爽又猛又粗的视频A片| 丁香婷婷六月| 人人97操| 婷婷6月综合网| 99久久精品网| 天天插天天爱| 亚洲午夜Av| 日日日,com| 很很干五月天| 色色色色色色色色综合网| 麻豆AV一区二区三区| 久久丁香综合精品综合| 丁香婷婷久久| 九月色婷婷综合| 深爱五月激情| 九九大香视频| 丁香五月在线观看完整版| 99热网址| 国产第99页| www.主妇. com| 丁香五月播播| 91色性感五月婷婷丁香| av在线免费播放观看| 国产免费一区二区三州老师F1……| 欧美熟妇一区二区三区| 伊人丁香花综合影院| 97超碰在线免费观看| 国产AV国片偷人妻麻豆| 五月激情综合网| 日本成人小说婷婷六月| 婷婷五月花| 狼友超碰| 久久怡红院| 国产精品涩涩涩视频网站| 婷婷五月天激情综合| 99热精品免费在线观看| 久久久全国免费视频| 欧美激情丁香五月| 91九色国产| 丁香五月婷婷操逼| 久久久久久丁香五月| 五月丁香大香蕉| 婷婷性爱网| 99在线亚洲| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 欧美操综合| 亚洲综合网激情小说| 亚洲AV日韩无码| 婷婷五月天性爱视频| 五月婷婷和六月| av中文在线| 色情婷婷。| 色婷婷视频综合| 超碰v| 天天插天天玩天天干| 丁香婷婷九月| 久久久.COM| 99热色精品| 亚洲精品成人| 99国产精品久久久久久久久久久| 99操碰| 91人人操.COM| 超碰操网| 丁香五月天激情| 婷色五月天| 99热最新精品| 天天色亚洲| 激情婷婷丁香五月天| 日本天天操| 久久综合网桃花| 日韩aaaaa| 人人搡人人| 99人妻碰碰碰久久久久视| 婷婷色基地在线看 | 丁香五月色综合色播五月| 玖玖无码中文| 婷婷丁香社区网| 久久人妻久久| 26UUU在线观看| 婷婷丁香九色| 99九九玖玖| 婷婷激情九月| 激情五月综合网| 秋霞网在线观看理论91| 免费色婷婷| 五月婷综合| 九月婷婷激情| 天天插天天日| 五月综合色播播丁香婷婷| 丁香九月激情在线视频| 婷婷狠狠18禁久久| 婷婷五月天直播| 激情 久久 婷婷| 婷婷另类小说| 性爱在线播放av| 人妻第九页| 欧美国产一区二区三区| 久久99免费视屏| 欧美韩国日本| 狠狠狠色激情综合适合| 丁香五月激情婷婷视频| 久草视频大香蕉99| 人人爱干人人爱草| 色五月婷婷亚洲最大| 91狠狠综合网| 欧美丁香五月| 成人国产欧美大片一区| 五月天伊人| 播五月婷婷开心| 色99xx| 123草逼网| 色亚洲中文| 五月天久草| 九九热在线观看视频| 九月婷婷丁香| 国产成人综合电影| 超碰成人电影| 99免费热视频在线| 色五月丁香婷婷综合| 日韩高清久久| 亚洲av综合在线| 九九色逼| 99色网站| 婷婷五月婷婷五月| 丁香五月激情宗合网| 国产色色小草视频| 少妇被躁爽到高潮无码文| 五月天婷婷色综合| 五月婷婷狠狠干| 久久九⑨| 五月天成人在线视频网站| 色情五月综合婷婷| 综合久久久婷| 67194中文在线| 99久久99久久综合| 视频一二区| 噜噜噜色噜噜| 人妻系列久久久久久久久久久 | 99热 日韩| 久久98| 六月 丁香 视频| 婷婷激情五月天激情在线| 99碰| 新激情综合| 伊久大香蕉| 久久久久9999| 欧洲色| 欧美天堂久久| 色噜噜五月天| 久久久久网站| 大香蕉九九热| 婷婷丁香五月综合激情小说| 干婷婷五月天| www.99热国产| 五月婷婷成人网首页| 激情久久久久| 婷婷性爱网| 五月激情综合深爱| 99五月婷| 人妻六月天| 丰满女老板BD高清A片| 九日日夜夜69| 99热最新| 午夜av网| 五月婷婷丁香六月| 婷婷五月天久久| 丁香六月啪| 五月丁香婷婷网在线在线| 色五月婷婷DVD| er99免费视频在线| 久久婷婷在线| 九九热99热| 激情五月丁香综合网站| 韩国天天婷婷| 综合五月丁香六月婷婷| 99热这里是精品| 天天玩天天摸| 免费国产VA国产免费| 久9视频免费播放| 久婷久婷激情肉| 五月婷婷开心网| 青青草原爱爱网| 国产精品久久久60086| 六月丁丁香| 手机AVAV天堂看网| 丁香婷婷激情网站| 91久久人人操| 另类精品视频在线观看| 成人午夜天| 亚洲狠9| 97操碰人免费| 大香蕉人在线65| 91九色|疯狂|高潮|对白|| 97干网站| 丁香婷五月天| 五月天色综合| 中文字幕人成乱码在线观看| 色色999三级片| 国产综合久久久777777| 色情性爱视频网址| 欧州色色| 99无码视频| 国产av一区二区三区| 91大神在线免费看视频全集男男一起操| 99资源人人| 久久XX| 亚洲看av的网站| 四月婷婷五月丁香| 亚洲蜜桃精久久久久久久久久久久| 黄色网址五月婷婷| 高清视频一区| 人妻自慰高清合集| 久久三级视频| 大香蕉太香蕉视频97| 亚洲AV网址| 日本狠狠爽| 色综合伊人网| 男男野外做爰全过程69| 99热国内精品| 日本熟女内射| 激情小说婷婷| 久久激情天堂| 五月婷婷开心六月激情小说| 丁香六月色婷婷| 无码AV免费精品一区二区三区 | 香蕉99网| 丁香五月婷婷性爱| 涩涩五月天| 亚洲亚洲人成综合网络| 国产9色在线/日韩| 91午夜激情| 亚州激情网站无码| 99热精品免费| 五月婷婷婷色| 日批在线看| 91丨九色丨东北熟女| 五月丁香综合久久夜夜| 蜜乳A√| 色啪网| 99天堂网最新| 丁香婷婷啪啪啪| 天天狠狠夜夜狠狠2023| 日本人人干| 天天爽天天摸| 激情综合视频| 丁香六月毛片| 99精品国产乱码久久久人妻| 99热99成人| 五月婷婷九| 艹色18p| 激情 婷婷 丁香五月天| 大陆极品少妇内射AAAAAA| 色情综合| 亚州操人在线视频| 天天摸天天肏| 久久丁香| 狠狠干狠狠色| 天天做天天爱天天做| 99国产在线| 琪琪色五月婷婷老师| 色婷婷六月精品| 五月精品免费XXX| 激情丁香五月婷婷| 五月婷婷 欧美| 丁香五月欧美成人| AV在线大香蕉| 婷色五月| 六月丁香基地| 97天堂| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 九九九九这里只有精品| 天天色图| 欧美丁香婷婷五月| 成人在线日韩| 婷婷成人五月天| 天天日综合网射| 97人人草| 婷婷丁香水多多视频| 强壮公让我夜夜高潮A片视频| 欧美欧盟性爱网| 五月天色社区| 无码一区二区日韩| 91.www综合| 99精彩视频在线观看| 国产露脸150部国语对白| 欧美丁香六月激情视频| 九九综合网| 天天插综合网| 婷婷五月天av| 97在线精品| 亚洲五月天天| 五月丁香激情综合网官网| www色婷婷com| 色综合激情| www.99热| 久久视频这里99| 欧美激情伊人| 五月花婷婷| 天天橾日日橾夜夜橾17| 欧美婷婷九月| 99久久6| 开心亚洲久久开心| 色五月中文字幕| 激情五月天色色| 婷婷黄色五月天在线视频| 五月婷婷视频ab| 在线亚洲综合网| 伊人久久大香线蕉av一区| 丁香六月开心| 久9精品视频在线| 岛国av网站| 99九九精品| 五月开心播播网| 涩综合婷婷| 亚洲色婷婷| 久久九九激情五月天 | 五月婷婷丁香网| 中文av网站| 五月婷丁香| 激情AV| 久久婷婷综合基地| 久久在线视频免费观看| 综合99久久天天综合| 丁香婷婷精品视频| 九九超碰人人| 国产69久久久欧美黑人A片| 丁香五月在线观看| 午夜美女人啪最红院| 久久婷婷五| 久久激情五月| 激情五月色婷婷| 婷婷免费无视频| 婷婷五月丁香六月| 久久午夜丁香| wwwav大香蕉| 爱射综合| 伊人玖玖婷婷| 五月丁香狠狠| 这里只有精品99视频| 亚洲av网址| 日韩国产在线精品| 丁香婷婷影院| 九九久久99精品免费观看www| 日日操夜夜擼| 久热这里| 激情五月天色色网| 亚洲综合视频在线| 日韩性爱无码| 免费在线观看av网站| 狠狠五月天| 69精品人妻不卡视频| 狠狠五月激情婷婷直播片| 久久丁香五月婷婷| 99久久婷婷五月综合| cc精品国产性传播| 大伊香蕉玖玖爱| 五月天丁香婷婷久久九| 五月丁香啪啪啪| www夜夜操| 五月综合丁香婷婷| 久久思思热| 久播影院免费观看电视剧大全最新网| 婷婷五月天99| 99热在线这里只有精品| 5月丁香婷婷| 五月婷婷高清| 都市激情久久| 99久久99热| 丁香六月天AV| 五月www| VA国产在线综合网站| 久久婷婷五月天| 超碰com| 成人 在线 日韩| 久热黄色| 五月丁香影院| 日韩欧美一区二区三区四区| AV色五月婷婷| 立川无码av| 色播丁香五月婷婷操:屄| 色婷婷五月六月丁香综合视频| 丁香5月激情网| 久久综合婷婷| 99色色网站| 午夜丁香六月婷| 五月天色综合服务平台| 五月丁香婷庭在线| 丁香五月婷婷影院| 五月婷婷开心网| 99碰网站| www.夜夜操.com| 久久视频婷婷| 激情小说五月丁香在线视频观看视频| 五月天婷婷午夜丁香| 男人天堂亚洲综合| 中文字幕+乱码+中文字幕在线观看| 久这里只有精品| 六月份天丁香婷婷| 玖玖99免费视频| 久久免费婷婷视频| va亚洲中文在线| 丁香婷婷丁香五月欧美人| 久久激情中文| 五月天婷婷香蕉狠狠超碰综合| 五月天丁香成人社| 日本怕怕视频| 婷婷综合五月色播| 五月天开心婷婷激情网站 | 婷婷99热| 99久久这里只有精品免费官网| 天天久久综合| 激情视频综合| 精品夜夜澡人妻无码AV| 色婷婷中文| WWW·色色色·COM| 亚洲五月丁香综合网| 99re这里有精品手机在线| 亚洲色热| 亚洲精品又粗又大又爽A片| 亲子乱AV-区二区三区| 99热精品观看| 伊人天天色| 99久在线精品99re5热视频| 思思热视频在线观看| 我淫我色婷婷五月天激情四射| 97超级碰碰碰| 亚洲五月天伊人| 亚洲无码yw| 欧美三级巜人妻互换| 九热视频精品| 日韩久久这里只有精品| 爆乳熟妇一区二区三区爆乳照片| 国精产品一区一区三区免费视频 | 五月婷激情| 久久99久久99精品免视看婷| 操逼五月婷婷| 91天天操天天干天天射| 亚洲免费99| 国产成人+综合亚洲+天堂| 丁香婷婷欧美综合| site:hcxsz888.com| 丁香五月婷久久| 91碰碰碰| 久婷婷| 五月丁香六月香综合激情| 爱射综合| h亚洲| 日日艹思思热| 人妻内射一区二区在线视频| 六月婷婷综合| 五月激情小说| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| 欧美狠狠草| 日本久久人人| av在线不卡播放| 色婷婷五月天激情综合| 天天色粽合合合合合合合| 久久新| 99热这里只有精品免费观看| 国产精品久久久久久久久久| 婷婷八月激情| 91精品丝袜久久久久久| 免费亚洲成人电影AV| 久久久久人妻精选| 色五月,com| 六月婷婷日| 香蕉综合网| 天天开心天天色| 91九色在线| 亚韩在线视频| 97婷婷狠狠| 色99在线看| 狠狠摸狠狠摸| 超碰成人AV| 久色资源| 婷婷九月在线| 欧美性色视频| 九九精品热播| 人妻AV在线观看| 91青娱乐青青草| 丁香五月婷婷偷拍| 激情99热| 另类天堂| 激情五婷精品网在线观看网址| 超碰国产在线| 操操操www.com| 91丨九色丨43老版熟女| WWW,激情五月天,COM| 狠狠草在线观看| 五月伊人综合| 免费观看全黄做爰的视频| 色色丁香五月婷婷| 婷婷丁香大香蕉| 激情五月色在线播放| 丁香五月瑟瑟| 婷婷情爱五月天6| 久久九九热38| 亚洲AVDVD| 五月丁香激| 91精品在线看| 五月天偷拍| 五月天婷亚洲综合在线嫩草网| 日本人妻A片成人免费看片| 激情婷婷五月亚洲| 在线视频区| 26uuu最新地址| 日本久久人| 五月花免费视频| 亚洲AV激情五月综合网| AV网在线| 亚洲色五月婷婷| 久色网址| 成人午夜视频精品一区| 久久久五月四色| 色欧美影院| 久久久这里有精品| 伊人婷婷五月| 超碰高清在线| www超碰| 色久五月| 99久精品视频| 五月天激情国产综合婷婷婷| 久久小片| 六月丁香激情综合网| 九九9久九9国产视频| 狠狠色狠狠操| 六月丁香成人| 大香蕉久久久久久久久| www.婷婷五月天.com| 婷婷丁香五另类网站| 精品五月天| 激情四射婷婷| 美国少妇性做爰| 99只有这里有精品在线视频| 久久五月天大美女| 激情五月天色色色| 婷婷五月天成人| 涩婷婷五月天| 永久思思热在线| 伊人久久大香| 99成人| 99色视频| Va另类视频| 久久新地址| 丁香五月婷婷操逼| 色色99| 色婷婷的五月天| 秋霞学生妹一二级| 91色噜噜狠狠狠狠色综合| 夜精品无码A片一区二区蜜桃| 五月丁香六月激情视频| 玖玖爱资源站| 99视频| 99热播放| 色五月丁香网| 婷婷色5月天在线。| 91色九| 丁香五月桃花在线激情综合| 久久久激情| AV成人在线播放| 99热这里只有精品一区| 99久久99视频只有精品| 色色色五月婷| 另类丁香五月天区图| 久久婷婷视频| 婷香五月| 午夜九九九九九九九九九九九九九| 国产精品久久久60086| 日韩免费乱轮网站| 丁香婷婷性爱| 日韩免费99| 日韩有码一区| 五月激情四射网站| 熟女人妻一区二区三区免费看| 91九色精品女同系列| 99热首页| 日韩在线五月天婷婷| 五月色欧洲| 欧美成人无码高清一区二区三区| 亚洲综合视频网| 玖玖99精品视频| 爱狠射| 熟妇国产| 亚洲av电影在线| 丁香五月天久久| 强辱丰满人妻HD中文字幕| 99视频精品在线| 天天色播| 五月婷婷六月丁香综合在线| 日本99热| 草草视频91| 色婷婷小说| 五月丁香综合| 久久久婷| 99日韩| 亚洲精品字幕在线观看| 欧洲色| 97自拍视频在线| 五月丁香亭亭| 99婷婷狠狠成为人免费视频| 亚洲视频一区| 日本视频不卡123区| 9久热精品在线视频| 狠狠爱深色婷婷综合| 国产,欧美,学生妹,视频| 伊人激情影院| 国产激情av| 成人在线综合| 五月激情综合网| 99,色| 婷婷欧美色| 六月伊人婷婷| 天天插天天插天天插| 亚洲激情.com| 婷婷五月天丁香社区| 日本一级一片免费视频| 亚洲色99| 亚洲精品V天堂中文字幕| 欧美A级成人婬片免费看理论| 99久| 狠狠99| 五月婷婷深深的爱| 九九草热在线观看| 丁香色影院| 超碰99在线观看| www.91色| 色五月 婷婷, 大香蕉| 色婷婷aV四虎| 九热...av| 思思99精品视频在线观看| 久久九九99亚洲国产久精综合| 永久AⅤ1| 97AV在线视频| 少妇高潮呻吟A片免费看软件| 国产精品久久久爽爽爽麻豆色哟哟| 久久久精品免费啪啪国| www.久久爱.c n| 激情五月综合网| 五月婷婷黄色视频| 五月婷婷九| 五月天激情网站| 日韩国产AV播放| 婷婷五月综激情| 五月激情丁香六月狠狠干| 久久精品视频9| 91丨九色丨高潮丰满日本| 亚洲国产精品SUV| www.刺激色网站www.| 亭亭丁香aV| 五月丁香六月婷婷在线| 高清无码入口| 婷婷97C| 99色这里| 人人操av| 国产午夜伦鲁鲁| 色丁香婷婷| 五月天激情社区| 天天狠天天叉| 国产伊人大香蕉| WWW丁香五月| 99综合网| 99热10在线高清播放| 久久伊人婷婷| 五月天婷婷丁香社区| 亚洲国产99| 丁香六月婷婷社区| 婷婷五月激情片| 色停停香蕉视频| www.夜夜爱.com| 77799热| 精品久久久999| 伦乱人妻| 亚洲第精品| 久热这里只有精品99re| 五月开心啪啪| 五月丁花色综合网| 性爱综合网| 久久嘟嘟丁香| 狠狠操狠狠干综合| 久久99国产综合精品免费| 伊人色综合影院视频| 色色COm| 乱精品一区字幕二区| 99精品在线观看| 干一干xxxx| 97人人操人人操人人操人人| 五月激情综合五月| 狠狠色综合网| 五月天色色色| 日本一级| 日本专区久久| 婷婷丁香激情综合色情| 日韩AV中文在线观看| 99色最新在线视频| 99啪啪| 婷色五月天| 超碰人人99| 亚洲国产网站| 中文在线视频久1| 亚洲天堂色| w婷婷五月婷婷w| 色五月激情五月| 久久婷婷六月天| 六月婷婷综合| 九九国产视频| 欧美这里只有精品| 亚洲婷婷在线播放十月| 99热超碰在线| 9久久精品| 99热9| 一级片sese片.COM| 欧美婷婷综合| 五月丁香色婷婷婷基地| 婷婷成人五月天| 99亚色色色| 色婷婷丁香五月天| 婷婷亚洲五月丁香综合在线| 久久视频在线视频| se99在线| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 九九九九热99超碰| 久久久久人妻中文| 亚洲正能量欧美| 91玖玖| 亚洲精品午夜国产va久久成人| 午夜色婷婷| 丁香六月婷婷| 六月激情婷婷| 九九九午夜影院成人| 在线理论片| 综合图区激情| 日韩AV一区二区三区| 5五月综合网亚洲| 五月综合激情| 狠狠爱综合| 五月天婷婷色小说| 真实熟女-91九色| 婷婷五月天天天| 97丁香婷婷| 中文字幕成人| 婷婷五月久久| 99偷拍视频在线日本| 五月婷婷久久久| 久久视频这里都是精品| www.99热视频| 国产亚洲AV人片在线| 丁香激情五月少妇| 七七九色| 拍真实国产伦偷精品| 玖玖资源天天无码| 丁香婷婷婷五月综合色情| 综合久久久| 婷婷五月天播| 久777| 婷婷五月天亚洲综合| 五月天婷婷色五月天| www婷婷色| 99热青青草| 狠狠999| a色婷婷| 91久久久久久| 色五月婷婷很很操| 影音先锋按摩| 亚洲精品第一国产综合亚AV | 欧美色99| 日操五月婷| 99热99| 国产午夜精品AV一区二区麻豆| 丁香婷婷婷五月| 99精品国产在热久久| 成人精品免费在线观看| 91爱啪啪| 啪到高潮激情丁香五月| 久久五月丁香| 极品五月天| 丁香五月婷婷基地| 五月丁香综合激情| 免费99情趣网视频| 九九精品亚洲| 影音先锋高清无码资源网| 综合另类视频| 天天色综合网吨吧| 久久天天天| 99久热精品在线| 影音先锋女人AA鲁色资源| 99综合网| 五月丁香六月婷婷亚洲| 97久久超碰| 99热久久日本| 久久综合久色欧美综合狠狠| 综合久久影院| 激情5月婷婷| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 六月综合婷婷开心伊人| 五月亚洲激情| 午夜免费试看| 久久99精品久久久| 亚洲日韩操B| 五月婷婷激情| 久9无码视频| 日韩爱操视频| 91啪级电影| 9色在线| 夜夜躁爽日| 婷婷久久性爱| 99久久婷婷国产综合亚洲| 婷婷亚洲色| 婷婷五月天黄色| 免费观看的婷婷五月视频在线| 色色色综合视频| 综合欧美五月婷婷| 激情98色婷婷五| 婷婷五月天丁香花| 婷婷色情网| 97干视频在线| 色 色 色综合com| 99热精地址| 久久人人人人妻| 五月婷婷狠天天色综合| 99视频色在线观看| 任你爽视频| 在线成人网址| 99热亚洲| WWW色色色COm| 99在线资源| 五月激情综合性爱| 91日综合欧美| 91色色色视频| 亚洲av电影网站| 99年操人人爽| 欧美性生交XXXXX无码小说| 五月天激情国产综合婷婷婷| 国产亚洲在线| av九九| 国产SUV精品一区二区6| 婷婷导航| 日本不卡一区二区三区| 国产成人精品一区二三区熟女在线| 五月婷婷激情| 国产真人做爰视频免费| 91紱請| 91干网站| 丁香婷婷婷婷十二月在线观看视频| 亚洲AV成人精品网站在线播放| 婷婷5月久久综合网站| 日韩青青| 9l视频自拍九色9l黑人| 色婷婷丁香AV综合| 欧美月久久| 99热在线资源| 激情综合婷婷| 久久婷婷成人视频| 开心婷婷五月花| 久久这里只有国产视频| 丁香五月婷婷色| 99r这里| 色婷婷社区| 天堂综合久久 | 亚洲五月天色色| 熟女激情网| 91九色|疯狂|高潮|对白|| ..真实国产乱子伦对白在线_欧| 五月婷婷69| 五月婷婷色综图片| 丁香五月偷拍| 这里只有免费精品| 婷婷五月天AV| 欧美123区免| 性爱综合网| 99re免费精品视频| 婷婷天堂综合| 伊人婷婷大香蕉在线| 思思热热久久| 婷婷综合在线| 五月天激情四射| 国产乱子轮XXX农村| 九月丁香网婷婷| 五月丁香色婷基地综合久久| 丁香五月激情宗合网| 欧美色六月婷婷| 五月丁香六月婷婷久久| 欧洲不卡视频| 亚洲深喉aV| 成人网在线视频| 欧美日韓成人亚洲精品另类| 色播五月丁香| 五月婷婷色| 久久桃花网色婷婷| 人妻aV在线| 亚洲欧洲自拍图片专区五月天| 久久金品黃色| 色婷婷99| 精品亚洲日韩99欧美片| 99热这里只有精品国产免费| 五月天激情啪啪| 狠狠做婷婷| 在线五月婷| 久热久色| 五月婷婷之综合激情| 色色色色网| 99热免费18| 日日噜狠狠色综| 天天在线XXX| 国产成人精品一区二三区熟女在线| 亚洲无码你懂的| 深爱五月天婷综合| 一区视频网站| 五月婷婷很很色| 天天色综合天天| 天天干天天干天天| 国外亚洲成AV人片在线观看| 色情久久久| 中文字幕乱轮| 久久99网站| 亚洲超级碰| 99.色| 99A片| 伊人玖玖婷婷| 九九热精品视频九九| 97啪啪| 97资源碰碰| 丁香五月天堂网| 日操夜操天天操不卡| 天天骑日日爽| 日韩色五月| 国产三级在线播放| 婷婷丁香高潮了| 夜夜骑夜夜操| 久久九九玖玖| 亚洲精品婷婷| 67194中文在线| 丁香六月婷婷高清| 97色色综合| 99视频35精品视频在线观看| 99re这里| 五月婷婷久久网| 五月天婷婷色播| 99操逼| 五月天丁香六月综合| 91操片| 激情五月天的婷婷| 激情网婷婷五月天| 爆乳熟女-区二区三区| 久久婷婷在线| 亚洲第一成人无码A片| 国产99美少妇| 五月丁香777| 久9视频| 色婷婷色99国产综合精品| 91超级碰在线| 99色视频| 天堂综合久久| 丰满人妻一区二区三区| 久久99久久久久久久噜噜| 五月丁香无码视频| 91色综合久久| 天天xxxxxx天天日| 97干在线视频精品店| 深爱五月亚洲| 九九热狼人| 亚洲人人操BD| 精品婷婷丁香五| 99精品小视频| 丁香婷婷婷五月综合色情| 99热只有这里有精品| 97人人看一| 久久婷婷91| 婷婷五月综合在线| 99热精品免费|