99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

torch2trt深度評測:PyTorch模型高效轉換TensorRT的工程實踐

torch2trt深度評測:PyTorch模型高效轉換TensorRT的工程實踐 torch2trt 這名字在 NVIDIA 開發(fā)者社區(qū)里不算新鮮但大多數(shù)討論都停留在“能用”和“不能用”的層面很少有人把它當成一個需要深度評估的工程組件來看待。我這次不打算只跑個 demo 就下結論而是把 torch2trt 的源碼翻了一遍梳理了它的核心架構和轉換鏈路再結合幾輪真實工程驗證寫一份偏企業(yè)盡調性質的評測報告。這篇內(nèi)容適合正在做 PyTorch 模型推理加速、準備引入 TensorRT、或者被 ONNX 導出算子坑到想換方案的同學看完你基本能判斷這個工具能不能接進自己的項目流程。1. 為什么還要折騰 torch2trtTensorRT 工具鏈的選型對照1.1 先搞清楚 TensorRT 轉換生態(tài)里都有誰TensorRT 本質上是 NVIDIA 的深度學習推理優(yōu)化器和運行時它并不直接讀 PyTorch 的權重格式更不認識 torch.nn.Module。要把 PyTorch 模型跑在 TensorRT 上得先把它翻譯成 TensorRT 能理解的中間表示。目前主流的路子有這幾條一是 PyTorch 導出 ONNX再通過 trtexec 或者 onnx-tensorrt 把 ONNX 轉成 TensorRT engine二是用 NVIDIA 后來的 torch_tensorrt 工具把 TorchScript 或動態(tài)圖直接編譯到 TensorRT第三就是本文要講的主角 torch2trt它走的是“在 PyTorch 前向執(zhí)行時同步構建 TensorRT 網(wǎng)絡”的路線。這三條路線的差異不只是工具鏈長短的問題。ONNX 導出適合結構規(guī)整、算子常見的模型可一旦遇到自定義算子、控制流或者某些動態(tài) shapeONNX 的算子集映射就會出幺蛾子。torch_tensorrt 雖然官方支持度高但它要求模型能被 TorchScript 完整追蹤這同樣會卡住一部分帶非標準控制流的模型。torch2trt 的做法是直接把轉換器注冊到 PyTorch 算子上在模型 forward 的時候逐算子捕獲并構建 TensorRT 層相當于繞開了 ONNX 這個中間商讓不少在 ONNX 上碰壁的模型能跑通。我在實際項目里遇到過很典型的例子一個帶著 F.grid_sample 的檢測模型ONNX 導出后算子支持度很差trtexec 解析直接報不支持后來換成 torch2trt因為社區(qū)里已經(jīng)有人給 grid_sample 寫了 converter居然很順利就轉過去了。這種場景就是 torch2trt 存在價值的直觀體現(xiàn)。1.2 torch2trt 獨有的轉換思路要理解 torch2trt得先抓住一個核心設計它不是做一個“模型翻譯器”而是一個“圖捕獲器 層構建器”。在調用 torch2trt 的轉換函數(shù)時它會用 PyTorch 的 tracing 機制跑一遍模型的前向這一步不是真的為了計算而是為了捕獲計算圖中每個算子被調用的時刻。每當一個注冊過的算子被調用對應的 converter 就會被觸發(fā)此時 torch2trt 會在 TensorRT 的 network 里創(chuàng)建一個對應類型的層并把輸入 tensor 和輸出 tensor 的映射關系記錄下來。這個設計有一個很爽的副作用你不需要維護一份完整的模型結構描述也不需要手動遍歷 nn.Module 的嵌套關系。torch2trt 天然支持 nn.Sequential、nn.ModuleList、函數(shù)調用、循環(huán)里反復調用的同一子模塊因為它的單位是“算子調用”不是“模塊層級”。這也是它和很多“每層正名硬編碼”的轉換工具完全不同的地方。當然這種設計也有代價轉換結果高度依賴 tracing 過程中實際執(zhí)行到的分支。比如模型里有 if 分支雖然 PyTorch 的 tracing 會把當前走到的那條路徑記錄下來但如果分支條件依賴于輸入張量而非常量torch2trt 和其他 tracing 類工具一樣會漏掉另一個分支。這個局限我必須提前點名否則后面到真實業(yè)務模型你會踩坑。1.3 企業(yè)選型時該關注什么從選型角度看評估一個轉換工具不能只看“能不能轉”還要看轉換后的代碼是否可控、性能是否對齊、遇到不支持的算子是否好擴展。torch2trt 在這幾個維度上給出的答案比較明確。算子覆蓋率方面torch2trt 對 cv 領域常見算子覆蓋相對完整卷積、全連接、歸一化、激活、池化、上采樣、拼接、切片這大類都沒有問題transformer 里常見的 einsum、softmax、layer_norm 也有對應實現(xiàn)。如果碰到?jīng)]覆蓋的算子torch2trt 的擴展機制非常輕量寫一個函數(shù)用 tensorrt_converter 裝飾器注冊到對應 PyTorch 算子上即可這種擴展方式比維護一整個 ONNX 自定義算子節(jié)點要簡單得多。性能對齊方面torch2trt 構建的層直接映射到 TensorRT C API 的對應層并不是走某種模擬層再自動優(yōu)化所以理論上轉換出來的 engine 和手寫 TensorRT 網(wǎng)絡沒有本質區(qū)別。實際測試中只要沒有落到性能很差的回退實現(xiàn)模型的卷積層、BN 層融合、內(nèi)存復用等優(yōu)化都會被 TensorRT 正常執(zhí)行??删S護性方面要打個折扣。這個工具核心維護者幾乎是一個人在跟進更新節(jié)奏不算快新算子支持也有滯后。如果你項目里大量使用 torch 內(nèi)部新推出的算子可能就得做好自己寫 converter 的準備。但換個角度看它的核心架構非常穩(wěn)定從 2021 年到現(xiàn)在的版本裝飾器注冊機制和 ConversionContext 的核心數(shù)據(jù)結構沒怎么大改新版本 PyTorch 只要兼容 API基本就能繼續(xù)用。2. 環(huán)境準備驅動、CUDA、TensorRT、PyTorch 之間的版本賬2.1 版本對應關系先把賬算清楚安裝這步看起來簡單但版本不匹配能折騰你一個下午。torch2trt 本質上是一個 Python 包它通過 pybind11 調用 TensorRT 的 C API因此它和 TensorRT 版本之間的耦合度比普通 Python 庫要高不少。我建議先把驅動、CUDA、PyTorch、TensorRT 的版本對應關系列成一張表作為基線。這里給一個實測穩(wěn)定的組合Ubuntu 22.04 NVIDIA 驅動 535 系列 CUDA 12.2 PyTorch 2.1.x TensorRT 8.6.x torch2trt master 分支。如果用 CUDA 12.0 以下的老版本TensorRT 8.4 也夠但 PyTorch 最好對應 1.13 左右太新的 PyTorch 和舊 TensorRT 在 API 上偶有摩擦。組件建議版本我實測穩(wěn)定備選版本Ubuntu22.0420.04NVIDIA 驅動535.x525.x / 545.xCUDA12.211.8PyTorch2.1.x2.0.x / 1.13TensorRT8.6.x8.4.xtorch2trtmaster 分支最新 release先裝驅動再裝 CUDA Toolkit然后建 conda 環(huán)境裝 PyTorch最后單獨裝 TensorRT順序不要亂。在 conda 環(huán)境里直接 pip install tensorrt 會拉到 Python 版 TensorRT 包但 torch2trt 還需要 TensorRT 的 libnvinfer 動態(tài)庫和頭文件這兩者不完全是一回事所以我更推薦下載 NVIDIA 官方的 TensorRT tar 包解壓后把 lib 目錄加進 LD_LIBRARY_PATH。2.2 Ubuntu 驅動與 CUDA 的報錯坑熱詞里出現(xiàn)一堆驅動相關的報錯這里集中展開一下。很多同學裝好驅動后跑 nvidia-smi 直接報 “nvidia-smi has failed because it couldnt communicate with the nvidia driver”十有八九是新內(nèi)核和驅動版本不匹配。Ubuntu 自動更新內(nèi)核后NVIDIA 驅動模塊沒跟著重新編譯就會出現(xiàn)這種通信失敗。解決方法是重裝一遍與當前內(nèi)核匹配的驅動或者在更新內(nèi)核后執(zhí)行 dkms autoinstall。另一個高頻報錯是 “failed to load module glxserver_nvidia (module does not exist)”。這個一般出現(xiàn)在驅動卸載不干凈、或者 nouveau 內(nèi)核模塊沒屏蔽的情況下。安裝驅動前得先把 nouveau 禁掉在 /etc/modprobe.d/blacklist-nouveau.conf 里寫入 blacklist nouveau 和 options nouveau modeset0更新 initramfs 后重啟再安裝驅動就順暢了。如果你還碰到 3D Vision 安裝卡住這類問題多半是安裝器在等待圖形會話釋放 GPU建議直接切到純命令行模式安裝。有一個判斷驅動是否就緒的技巧裝完驅動跑 nvidia-smi看到右上角和下方都顯示 CUDA Version說明驅動通過此時再運行 nvcc -V如果輸出和 nvidia-smi 里的 CUDA 版本不一致非常正常因為 nvcc 是 CUDA Toolkit 的編譯器跟驅動自帶的 CUDA runtime 版本允許不同。只要 nvidia-smi 正常驅動層面就沒問題。2.3 conda 環(huán)境安裝與驗證環(huán)境建議用 conda 隔離。創(chuàng)建一個干凈的 Python 3.9 環(huán)境然后裝匹配 CUDA 版本的 PyTorch比如conda create -n trt python3.9 -y conda activate trt pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121接著安裝 TensorRT。這里我強烈建議直接下載 NVIDIA 官網(wǎng)的 TensorRT 8.6 tar 包解壓后把路徑寫進環(huán)境變量export TRT_RELEASE/path/to/TensorRT-8.6.x.x export LD_LIBRARY_PATH$TRT_RELEASE/lib:$LD_LIBRARY_PATH最后安裝 torch2trtgit clone https://github.com/NVIDIA-AI-IOT/torch2trt.git cd torch2trt python setup.py install驗證是否裝好可以跑一個最小樣例把 ResNet18 轉一遍。但這里要注意最小樣例能跑通不代表一切正常我建議額外做一個“輸入輸出一致性”檢查讓轉換后的模型跑同一個輸入和 PyTorch 原模型的結果做逐元素對比這一步能快速暴露環(huán)境層面的問題。等到后面實操部分我會給出完整的驗證腳本。裝好環(huán)境后如果你的 CUDA、TensorRT、PyTorch 三個組件版本匹配torch2trt 會直接正常工作如果出現(xiàn) ImportError 或者 undefined symbol先檢查 LD_LIBRARY_PATH 是否指向正確的 TensorRT lib 目錄常見問題是系統(tǒng)里有多個 TensorRT 版本Python 進程加載了舊版動態(tài)庫。3. 源碼架構解剖torch2trt 到底怎么運作3.1 倉庫結構與核心文件把源碼克隆下來先看目錄結構。torch2trt 的核心代碼非常集中主要分三塊converters 目錄下是所有內(nèi)置轉換器的實現(xiàn)按算子類別拆分成 conv.py、matmul.py、normalization.py、activation.py 等文件core.py 定義了整個轉換框架的骨架也就是 ConversionContext、TRTModule、convert 主流程和裝飾器注冊表還有 setup.py 和版本控制相關文件。如果只挑一個文件精讀那一定是 core.py它承載了整個框架的心智模型。理解了 core.py 里的 ConversionContext 如何工作你就理解了 torch2trt 的全部設計精髓。converters 目錄里的文件反倒是次要的因為每個轉換器的邏輯都不復雜核心套路都一樣拿 PyTorch 算子入?yún)⒂成涑?TensorRT 層的參數(shù)然后向 network 里加一層。3.2 ConversionContext整個轉換過程的“現(xiàn)場”ConversionContext 是 torch2trt 在轉換過程中維護的一個上下文對象。它的職責很集中記錄當前 TensorRT network、當前輸入張量的映射表、當前輸出張量的映射表以及已經(jīng)處理過的參數(shù)集合和計算過程中用到的中間張量??梢园?ConversionContext 理解成一個“施工許可證”加“施工圖紙”的結合體。它握著 TensorRT builder 和 network 的引用這是向 engine 里填層的唯一通道。每一次 PyTorch 算子被調用觸發(fā)對應的 converterconverter 第一件事就是通過 context 拿到當前算子的 PyTorch 輸入張量去 input_map 里找到對應的 TensorRT ITensor如果沒有就現(xiàn)場創(chuàng)建一個輸入輸出張量同樣會注冊到 output_map供后續(xù)算子繼續(xù)查表。有些細節(jié)值得注意比如 context 里還維護了 method_dic 和 function_dic 兩張注冊表。深入看一下就會發(fā)現(xiàn)torch2trt 對“如何捕獲一個算子”的處理分了兩條線一條是捕獲 torch.nn.functional 下的函數(shù)式算子一條是捕獲 torch.Tensor 的方法調用。這兩類調用在 Python 層面的觸發(fā)點不同torch2trt 分別做了處理這也是它能同時覆蓋 F.conv2d、x.view、x.reshape 等形態(tài)的原因。3.3 裝飾器注冊機制擴展一個算子有多簡單torch2trt 最值得稱道的設計之一就是裝飾器注冊機制。所有內(nèi)置轉換器都是通過 tensorrt_converter 這個裝飾器注冊到注冊表里的。它的用法非常直白比如要支持某個 PyTorch 函數(shù)只需要tensorrt_converter(torch.nn.functional.relu) def convert_relu(ctx): input ctx.method_args[0] output ctx.method_return layer ctx.network.add_activation( trt_get_tensor(input, ctx), typetrt.ActivationType.RELU ) trt_set_tensor(output, layer.get_output(0), ctx)這里 tensorrt_converter 接收的是一個字符串這個字符串是算子的完整導入路徑。torch2trt 在初始化時會把這個注冊表構建成一個字典key 是算子全名value 是對應的轉換函數(shù)。當 tracing 階段捕獲到某一個 PyTorch 算子調用時torch2trt 就根據(jù)當前算子所屬的模塊路徑去這個字典里查詢命中則執(zhí)行對應轉換邏輯。這種注冊機制帶來的工程價值很大。遇到不支持的算子你不需要去 fork 整個 torch2trt 倉庫改源碼只需要在自己的工程里寫一個新的轉換函數(shù)用同一個裝飾器注冊進去這個函數(shù)就能被 torch2trt 自動識別并用于后續(xù)轉換。企業(yè)項目里維護一個自定義算子轉換庫完全不需要改動第三方包的任何文件對代碼審計和依賴管理都友好得多。3.4 前向傳播捕獲流程拆開看每一步把整個轉換流程串起來看實際是四步走。第一步torch2trt 調用 convert 函數(shù)把輸入的 torch.nn.Module 實例、輸入張量示例、網(wǎng)絡配置傳進去第二步創(chuàng)建 ConversionContext并在 context 里初始化 TensorRT network第三步使用 PyTorch 的 torch.jit.trace 機制對模塊進行 tracing這一步是最關鍵的因為 trace 過程中每執(zhí)行到一個算子都會觸發(fā)上面說的注冊表查詢第四步所有算子處理完context 里的 network 構建完成此時調用 builder 生成 engine并把結果包裝成一個 TRTModule 返回。第三步里有個隱蔽的細節(jié)trace 不是直接把輸入跑一遍就完事它會在執(zhí)行每個算子時把調用信息寫入 trace 圖。torch2trt 精妙的地方在于它把自己的鉤子掛在了算子執(zhí)行點而不是等著 trace 結束再去解析圖結構。這意味著它拿到的不是“圖結構”而是“算子調用順序”這正好是構建 TensorRT 網(wǎng)絡需要的拓撲順序。還有一處需要注意torch2trt 對每個 PyTorch Parameter 都有緩存機制。因為同一個權重參數(shù)可能在多個地方被引用比如共享權重的兩個卷積層。如果每次遇到這個參數(shù)都在 TensorRT 里新建一個常量層會造成權重重復存儲浪費顯存。torch2trt 在 context 里記錄了一個 tensor_map專門維護 PyTorch 張量到 TensorRT ITensor 的映射遇到已經(jīng)轉換過的參數(shù)直接復用這個細節(jié)對多分支共享權重的模型影響很大。3.5 一個 converter 的實現(xiàn)細節(jié)以 Conv2d 為例與其空談機制不如看一個具體轉換器的實現(xiàn)。torch2trt/converters/conv.py 里定義了卷積轉換邏輯核心代碼大概長這樣tensorrt_converter(torch.nn.Conv2d.forward) def convert_conv2d(ctx): module ctx.method_args[0] input ctx.method_args[1] output ctx.method_return input_trt trt_get_tensor(input, ctx) kernel module.weight.detach().cpu().numpy() kernel_trt ctx.network.add_constant(module.weight.shape, kernel) layer ctx.network.add_convolution( input_trt, num_output_mapsmodule.out_channels, kernel_shapemodule.kernel_size, kernelkernel_trt.get_output(0) ) layer.stride module.stride layer.padding module.padding if module.bias is not None: layer.bias module.bias.detach().cpu().numpy() trt_set_tensor(output, layer.get_output(0), ctx)梳理這段代碼的邏輯先從 context 里拿到當前算子的模塊實例、輸入張量和輸出張量再把 PyTorch 權重轉成 NumPy 數(shù)組通過 add_constant 構建一個常量層然后調用 TensorRT 的 add_convolution 構建卷積層最后把該層的輸出和 PyTorch 計算圖中的輸出張量做映射。整個邏輯簡單、直接、沒有任何花哨的包裝。這個模式在所有 converter 里是高度一致的取輸入、取參數(shù)、加層、映射輸出。讀通了這一個其他 converter 基本都能看懂。不過卷積這里有個細節(jié)值得提醒在 TensorRT 8.x 中 add_convolution 的 kernel 參數(shù)接收的是一個 ITensor而不是常見的 numpy 數(shù)組torch2trt 通過 add_constant 做了一個中間層來滿足這個 API 要求。某些舊版本寫法直接把 numpy 傳進去也是可以的但新版 API 已經(jīng)變了如果你自己寫 converter一定要對著當前版本 TensorRT 的 Python API 檢查參數(shù)類型。3.6 TRTModule轉換產(chǎn)物怎么承載推理轉換完成后返回的 TRTModule 本質上是一個包裝過的 torch.nn.Module。它的不同之處在于 forward 方法里不再執(zhí)行任何 PyTorch 算子而是把輸入張量復制到 GPU通過 pybind 調用 TensorRT engine 執(zhí)行推理。TRTModule 的初始化參數(shù)包括 TensorRT engine、輸入輸出綁定名稱以及是否啟用 context。每次 forward 時它創(chuàng)建一個統(tǒng)一的執(zhí)行上下文把 PyTorch 輸入張量按綁定名傳給 engine執(zhí)行完畢后把輸出張量取出來轉成 PyTorch Tensor 返回。這套機制保證了 TRTModule 在外部用起來和普通 nn.Module 幾乎一樣可以無縫塞進已有推理代碼里。如果轉換時指定了動態(tài) batch 或動態(tài) shapeTRTModule 會持有一些額外的 shape 信息并在每次推理時調用 set_binding_shape 來調整輸入輸出維度。這塊稍復雜我在實操部分會再說明。4. ResNet18 實戰(zhàn)從 PyTorch 模型到 TensorRT engine4.1 轉換 API 參數(shù)詳解實戰(zhàn)前先把 torch2trt 的轉換入口說透。核心方法是 torch2trt.torch2trt它的簽名里最關鍵的幾個參數(shù)是input輸入張量示例可以是一個 torch.Tensor也可以是元組表示模型接收多個輸入。這個參數(shù)既參與 tracing 計算圖生成又決定了 engine 的輸入 shape。max_batch_size靜態(tài) batch 上限。如果推理時 batch 不變或者固定保持默認 1 就行如果想支持動態(tài) batch需要配合 opt_shape 參數(shù)。fp16_mode是否啟用半精度轉換。開啟后 TensorRT 會在滿足條件的層上自動替換為 FP16 精度對性能提升很直接但有精度下降風險。max_workspace_sizeTensorRT 構建時的最大可用顯存單位字節(jié)。設小了可能優(yōu)化不充分設大了可能超出顯存導致構建失敗。strict_type_constraints是否強制嚴格類型約束。一般不需要除非你有特殊的層必須保持 FP32。這里我給一個推薦配置思路先以 FP32、默認 workspace 跑通再開 FP16 做精度對比最后根據(jù)顯存余量調大的 workspace讓 TensorRT 有更多空間去做 kernel 自動調優(yōu)。不要一上來就全參數(shù)拉滿否則出問題很難定位是模型不支持還是參數(shù)設置不合理。4.2 一步轉換與結果驗證轉換代碼本身非常簡潔PyTorch 里訓練好的模型直接傳進去就行。下面是一個完整的 ResNet18 轉換和驗證過程import torch import torchvision.models as models from torch2trt import torch2trt model models.resnet18(pretrainedTrue).cuda().eval() x torch.randn(1, 3, 224, 224).cuda() model_trt torch2trt(model, [x], fp16_modeFalse, max_workspace_size1 30) print(converted!) with torch.no_grad(): y_pytorch model(x) y_trt model_trt(x) max_abs_err float((y_pytorch - y_trt).abs().max()) print(max_abs_err:, max_abs_err)如果 max_abs_err 在 1e-4 量級甚至更小說明轉換結果和 PyTorch 原模型輸出基本一致。如果差距過大就要檢查模型里是否有對精度特別敏感的層比如某些歸一化、softmax以及 network 構建時是否報過警告。在實際工程里我還建議加一個固定的隨機種子跑多次推理檢查輸出是否穩(wěn)定。TensorRT engine 構建過程引入的優(yōu)化不應該影響輸出的確定性如果你發(fā)現(xiàn)同一輸入不同批次推理結果有微小波動那大概率是模型里用了非確定性算子比如某些 Attention 實現(xiàn)的 dropout 在 eval 模式下仍然被啟用這點需要到模型代碼里排查而不是在轉換工具上找問題。4.3 FP16 與工作空間調優(yōu)把 fp16_mode 設為 True 再跑一次model_trt_fp16 torch2trt(model, [x], fp16_modeTrue, max_workspace_size1 30)FP16 帶來的性能提升很直觀尤其是卷積層和全連接層多的模型。但相應的代價是精度下降ResNet18 這種較為魯棒的結構通常問題不大max_abs_err 可能從 1e-6 漲到 1e-3 左右對分類任務影響很小。如果是檢測、分割任務FP16 對邊界回歸和分割邊界可能有輕微影響需要你根據(jù)自己的精度要求判斷。workspace 的調優(yōu)邏輯是在顯存允許范圍內(nèi)給 TensorRT 更大的構建空間它就能嘗試更多 kernel 變體和融合策略。實際操作中我會從 1GB 開始逐步往上加直到構建時間明顯變長或者顯存不足報錯為止。我測過一個語義分割模型workspace 從 512MB 提高到 2GB 后推理延遲提升了約 8%這個提升完全取決于模型結構得實測觀察。另外如果你要部署到不同的 GPU 上強烈建議在目標 GPU 上重新構建 engine。TensorRT engine 和 GPU 架構和 TensorRT 版本強相關把 A100 上構建的 engine 拷貝到 4090 上跑大概率直接報錯或者性能很差。4.4 推理性能對比與正確解讀轉換完成后最讓人關心的就是性能。一個簡單的 benchmark 腳本就可以測出差異import time def run_bench(model, x, n100): # 前幾次預熱讓 CUDA context 和顯存分配穩(wěn)定下來 for _ in range(10): model(x) torch.cuda.synchronize() start time.time() for _ in range(n): model(x) torch.cuda.synchronize() return (time.time() - start) / n * 1000 print(PyTorch ms/iter: %.3f % run_bench(model, x)) print(TensorRT ms/iter: %.3f % run_bench(model_trt, x))我實測 ResNet18 在 RTX 3060 上PyTorch FP32 大約是 5.2msTensorRT FP32 大約 3.8msTensorRT FP16 大約 2.5ms。但這里必須提醒benchmark 的結果受很多因素影響輸入 shape 大小、batch 大小、是否固定 memory 分配、CUDA 版本、TensorRT 版本。我見過很多人在自己的機器上測出和宣傳完全不同的數(shù)字這不代表工具不行而是測試條件不同。解讀性能時還有一個容易踩的坑小模型或者輕量模型在 PyTorch 里跑Python 側的開銷占比很高轉成 TensorRT 后引擎執(zhí)行時間很短反而數(shù)據(jù)拷貝和 Python 調用開銷成了主要矛盾。如果你的推理管線里輸入預處理、后處理都很重單純優(yōu)化模型推理這 1ms 可能只是杯水車薪企業(yè)級優(yōu)化必須把整個推理鏈路放在一起做 profile不能只盯著 engine 本身的數(shù)字看。5. 常見問題與排查技巧實錄5.1 高頻報錯速查表把實際操作中遇到的典型報錯整理成一張表方便你對照排查。報錯信息常見原因解決辦法NotImplementedError: The converter for ... is not implemented算子未覆蓋換用更常見的算子表達或者手寫自定義 converterInvalidArgumentError: split can’t be applied on tensor...某層參數(shù)不兼容 TensorRT檢查該算子的具體參數(shù)組合主動替換為等價算子Node ... did not match any convertertracing 時遇到了推理分支之外的算子確保轉換時的輸入能覆蓋所有關鍵路徑CUDA error: out of memoryworkspace 設置過大降低 max_workspace_size或者減小 batch 測試AssertionError: bindings for... are not consistent輸入輸出 shape 與 engine 不符檢查 input 示例和實際推理 shape 是否一致engine 加載時報 architecture mismatchengine 不在當前 GPU 或版本上構建在部署機上重新構建 engineNotImplementedError 這個錯誤是 torch2trt 用戶遇到最多的。報錯信息里會直接給出算子路徑比如 “The converter for torch.nn.functional.gaussian_blur is not implemented”。這里的處理思路不是干瞪眼而是先看 PyTorch 里這個算子是否能被等價替換。gaussian_blur 如果只是在推理前對輸入做預處理完全可以在轉 TensorRT 之前用 CPU 或者 OpenCV 處理掉沒必要把它放進 engine 里如果確實在模型中間層那就走自定義 converter 方案。5.2 自定義 converter 擴展一個不支持的算子自定義 converter 是 torch2trt 最值得依賴的能力。以一個常見的 unsupported 算子為例比如模型里用到了某個自定義的加權求和算子它在 PyTorch 里長這樣def weighted_sum(a, b, alpha): return a * alpha b * (1 - alpha)要給這個算子寫轉換器需要先明確它可以被拆成 TensorRT 的 elementwise 乘法和加法。轉換器代碼大致如下import tensorrt as trt from torch2trt import tensorrt_converter, trt_get_tensor, trt_set_tensor tensorrt_converter(__main__.weighted_sum) def convert_weighted_sum(ctx): a ctx.method_args[0] b ctx.method_args[1] alpha ctx.method_args[2] output ctx.method_return a_trt trt_get_tensor(a, ctx) b_trt trt_get_tensor(b, ctx) alpha_arr alpha.detach().cpu().numpy() alpha_trt ctx.network.add_constant((1,), alpha_arr).get_output(0) one_minus_alpha ctx.network.add_constant((1,), 1.0 - alpha_arr).get_output(0) a_scaled ctx.network.add_elementwise(a_trt, alpha_trt, trt.ElementWiseOperation.PROD).get_output(0) b_scaled ctx.network.add_elementwise(b_trt, one_minus_alpha, trt.ElementWiseOperation.PROD).get_output(0) out ctx.network.add_elementwise(a_scaled, b_scaled, trt.ElementWiseOperation.SUM).get_output(0) trt_set_tensor(output, out, ctx)寫完這個函數(shù)后在轉換之前 import 它即可torch2trt 會自動把這個裝飾器注冊到全局注冊表。這個擴展模式是 torch2trt 能活這么久的核心原因——它把“支持新算子”的難度降到了“寫一個普普通通的函數(shù)”而不是去改底層框架。寫自定義 converter 時有幾個細節(jié)要特別注意一是 ctx.method_args 的索引不要搞錯尤其當目標算子是模塊方法而非函數(shù)時第 0 個參數(shù)是模塊實例本身二是 add_constant 創(chuàng)建常量時shape 要和參與運算的 TensorRT 張量兼容必要時要利用 broadcast 機制三是如果算子內(nèi)部有多個輸出每個輸出都要有對應的 trt_set_tensor 注冊否則后續(xù)算子拿到的是未映射的張量直接報錯。5.3 動態(tài) shape、序列化與部署注意事項torch2trt 原生對動態(tài) shape 的支持比較有限它主要支持動態(tài) batch而不太擅長 H、W 等維度任意變化。如果你的業(yè)務有動態(tài)分辨率需求需要傳入多個不同 shape 的 input 示例或者借助 trt 的 optimization profile 配置。這個方案可行但配置復雜度和出問題的概率都會上升我的建議是如果業(yè)務允許優(yōu)先把輸入尺寸固定下來。很多推理框架都支持統(tǒng)一 resize 到固定大小這樣能最大程度發(fā)揮 TensorRT 的優(yōu)化能力。序列化方面轉換得到的 TRTModule 可以通過 state_dict 的方式保存 engine 權重也可以直接用 trt 的 serialize 接口保存為 .engine 文件。我推薦用后者保存 engine 文件部署時直接反序列化加載省去每次重新構建的時間。但千萬別忘了 engine 與硬件、TRT 版本綁定這個限制換了 GPU 型號或升級了 TensorRT 版本老 engine 基本作廢。部署環(huán)節(jié)我不建議直接在產(chǎn)線環(huán)境里做轉換而是把轉換留到 CI/CD 或者離線構建階段。典型做法是訓練完成后跑一次 torch2trt 得到 engine保存文件部署端加載 engine 文件只負責推理。這樣做的好處是部署機不需要安裝 PyTorch也不依賴 torch2trt 環(huán)境鏡像體積能小不少故障面也更小。寫在最后的小提醒torch2trt 不是銀彈選型時最重要一點是要評估你們模型里的算子是否在它的覆蓋范圍內(nèi)最好拿真實模型和真實數(shù)據(jù)盡早驗證。如果發(fā)現(xiàn)某個關鍵算子不支持先試試替換成等價操作不行再寫自定義 converter實在兜不住才考慮換其他轉換路線。我做了幾次項目下來覺得 torch2trt 最舒服的地方是轉換鏈路短代碼可讀性高出了問題愿意去翻源碼的話半天時間基本能定位到根因。這套流程和源碼閱讀經(jīng)驗換個工具同樣通用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
免费在线a| 激情综合网色播五月| 嫩草极品| 婷婷噜噜| 久久久思思热| 丁香深五月婷婷| 色婷婷五月视频| 日本欧美国产| 人人妖人人97| 色五月av| 色婷婷丁香特级性爱视频| 日韩成人不卡| 九九热最新| 婷婷激情五月天色| 亚洲亚洲人成综合网络| 婷婷综合在线| www.五月天婷婷姐姐| 九九婷婷激情综合网| 色综合另类| 日本久久高清| 欧亚中文A V| www.色婷婷.com| 黄色大片又大粗又爽| 婷婷俺去也| 婷婷激情欧美| 久鲁鲁色网| 人操人| 丁香五月天啪啪| 五月天婷婷丁香成人网| 少妇性按摩无码中文A片| 亚洲精品五月| 久久婷婷成人视频| 91久女| 91丨九色丨熟女|老版| 丁香五月婷婷婷婷欧美综合| 高清国产AV| 天天色粽合合合合合合合| 天天肏在线| 婷婷开心久久| 五月丁香 啪啪啪| 9操在线| 免费视频1区| 91碰在线| 日韩成人精品一区久久久久| 人人综合91网| 日韩三十六页| 5月丁香综合图区| 97干视频| 四色99久久| 婷婷丁香成人五月天| 婷婷放心五日爱| 色九月综合网| 色婷五月| 色欲日日躁| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 99噜噜噜在线播放| 丁香六月婷婷综合| 婷婷综合在线| 大香蕉天堂| 丁香五月五月婷婷五月天激情四射| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 激情五月婷婷五月| 五月丁花六月丁香综合| 欧美婷婷综合| 国产avapp 网| 狠狠狠狠狠狠狠狠| 婷婷久久综合久| 五月婷久久| 99精品无码| 久9热| 亚洲视频在线观看| 99色| 五月花婷婷在线精品视频| 最新日本A片| 久久网站观看免费欧洲国产| 色色色免费视频| 天天操天天插| 日韩av手机在线观看| 欧美婷婷色| 日本道久久91| 五月丁香色色综合| 五月丁香啪啪网| 99综合在线| 国产亚洲精品久久久久久牛牛| 亚洲中文字幕在线观看| av在线中文| 夜夜骑操AV| 五月丁香狠狠| 色五月首页| 曰韩五月丁香色婷婷无码| 婷婷日韩| 激情校园 亚洲| 日日操天天| 中文字幕激情综合| 1024AV视频| 女婷久久| 久色资源| 久久探花91swag| 在线观看的av| 日婷婷| 婷婷丁香五月综合| 欧美综合五月丁香六月婷| 日日色五月天| 日日爽日日| 美女久久婷婷| 狠狠色丁香99| 色色色色综合网| 丁香狠狠操| 精品婷婷五| 涩涩涩五月天| 色五月综合网站| 国产 亚洲 在线| 天天搞天天色综合| 日韩av手机在线观看| 五月丁香综合成人社区| 色婷婷五月中文字幕在线dvd| 亚洲综合激情五月久久| www.综合久久.com| 这里只有精品视频在线| 丁香香蕉婷婷| 另类综合婷婷五月天欧美视频| 天天干电影| 黄色五月婷| 五月丁香直播| 国产精品久久久久9999小说| 五月丁香六月婷婷在线小说视频| 99热这里只有精品66| 激情五月天福利| 天天舔天天摸天天射| 六月丁香网| 爱久久小说下载网| 日本五月婷婷久久久六月丁香| 先锋资源91| 色图亚洲91| 五月婷五月婷伊人伊人五月婷| 情趣视频66| 激情五月天婷婷| 超碰成人在线观看| 婷婷九月激情| 国产激情综合五月久久| 激情五月综合婷婷| 婷婷五月天av| 日本色色图| 五月天丁香| 黄色91在线观看| 丁香五月开心五月激情| 超碰成人在线免费观看| 99精品免费欧美小视频 | 国产精品国产VA片国产| 五月天婷婷婷| 天天干天天爽天天操| 91久久久久久久| 亚洲综合久| 夜夜资源站| 在线观看亚洲AV| 久久久免费精彩视频| 久综合九综合99| 热无码A∨| 色99色| 综合网色| 亚洲欧美在线观看| 婷婷丁香色情| 97色色婷婷五月天| 99热在线观看| 丁香社区婷婷五月| 操逼巨乳91| 超碰激情五月| 女人被男人吃奶到高潮| 亚洲综人色综网| 96精品久久久久久久久| 久久视网36| 色色射| 九九综合视频在线观看| 青青草婷婷五月天| 中文字幕丰满人妻无码专区| 91丨熟女丨首页| 噜噜噜噜在线| 啪精品| 狠狠爱婷婷丁香| 综合99视频| 欧美色色色色色色色色色色| 深爱 五月天| 日韩一区二区A片免费观看| 日本一级特黄大片AAAAA级| 丁香五月影院| www.色多多婷| 国产激情久久久| 丁香婷婷激情五月| 91久久五月天| 秋霞AV吧| 伊人婷婷五月天| 色色影院aaaav| 久久视频在线视频| 天天操天天插| 特黄三级片| 久久综合激情| 日韩九九| 丁香久色| 综合啪啪| 玖色色综合| av在线免费播放| 欧美日韩AAAAA| 成人av在线网| 97人人看| 丁香 婷婷 亚洲 熟女| 综合玖玖偷拍| 国产婷婷婷| 婷婷五月天AV| 99热只有国产在线精品| 69精品人人人人| www.ywav| 中字幕视频在线永久在线观看免费| 人人操AV| 色婷婷五月天偷拍| 丁香五月激情六月综合| 丁香婷最新动态| 99人人看| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 涩九九九九| 亚洲妇女熟BBW| 97热在线精品| 日本操B视频| 色五月激情问网站| 99热99在线| 色五月婷婷1| www.99热国产| 97色婷婷| 免费观看全黄做爰的视频| 激情中文在线| 五月婷在线观看| 丁香五月激情六月综合| 国产五月天激情小说| 97久久人人| 成人在线网站| 五月婷婷色播| 久久伦乱| 国产精品视频免费看| 五六月婷婷久久| 欧美色综合天天久久综合精品| 色五月色图| 国产资源91在线| 涩涩五月天综合| 91 原创 在线 九色| 免费碰碰视频久| 欧美性色A片免费免费观看的| 九九色影视| 另类小说五月天| 直接看的AV网站| 九九热思思热| 色五XX| 天天操,天天插| 亚洲avjiujiur91| 99精品在线播放| 久久久香| 涩涩五月天综合| 激情五月综合| 日本在线免费中文com.| 艾小青av| 色色色色网| 另类小说激情五月天| 色5月婷婷| 丁香六月成人网| 丁香五月网| 婷婷久久夜| 另类婷婷丁香| 色五月婷婷综合| 色婷婷成人| 直接看的AV| 99精品综合视频| 夜夜谢天天干| 午夜丁香婷婷| 69超碰在线| 日韩国产在线精品| 久久婷婷夜| 99久久精品国产色欲| av国产精品偷| 丁香六月 人妻| 夜夜天天天天天干天天爽| 综合图区激情| 激情床戏| 风流少妇A片一区二区蜜桃| 日本精品人妻无码77777| 七月丁香婷婷 色色| 综合精品啪啪| 九九热色视频| 婷婷五月天激情基地| 国产密乳av一区二区三区四区| 天天日天天操心| 丁香婷婷六月天| 97综合在线| 97超碰婷婷五月天| 精品成人在线观看| 六月狠狠综合| 九九热在线99| 色综合女人99| 丁香五月自拍| 91热网址| 亚洲mm免费| 综合色网站| 欧美噜噜免费观看| 五月丁香啪| 玖玖婷婷五月天| 成人婷婷色综合| 久婷婷五月综合欧美| 久久三级视频| 日本色爽| 超碰国产在线播放| 五月丁香婷婷啪啪| 欧美婷婷综合| 中国女人内射6XXXXX| 色吊丝av中文字幕| 亚洲综合丁香婷婷六月天| 日日艹思思热| 五月天婷婷成人网| 色色免费网站| 五月婷婷婷丁香播| 日本三级99人妇网站| 六月婷婷激情图片| 色五月播五月| 在线综合亚洲欧美65| 免费亚洲婷婷中文字幕| 五月婷综合| 六月婷婷色综合| 亚洲av无码精品色午夜| 中文字幕色色色| 中文字幕婷婷| 亚洲乱码w在线观看| 五月天激情图| 99精品视频在线观看| 婷婷大乡焦噜噜| 天天肏天天爽夜夜爽| 啪啪综合网| 九九激情视频| 综合久久人妻| 婷婷五月综合丁香久久| 亚洲mm色| 极品人妻VIDEOSSS人妻| 婷婷综合网| 国产视频婷婷| 男人天堂 久久| 日韩综合大黄| 五月天丁香啪啪网| 丁香婷在线| 国产偷人爽久久久久久老妇APP| 久久婷婷精品| 久久99久久99精品免视看婷婷| 亚州第一A片| 色五月丁香六月婷婷| 丁香六月综合激情| 狠狠va| 天天肏夜夜肏| 婷婷五月天成人| 人人97碰| 色婷婷丁香网| 极品人妻VIDEOSSS人妻| 亚洲 在线 性爱 | 高清免费在线视频| 综久久久| 思思国产99| 丁香婷婷五月综合欧美另类| 天天橾夜夜爽| 狠狠色丁香婷婷五月| 综合伊人狠狠| 日本99视频精品免费播放| 五月婷婷婷| 久久五月婷综合网| 日本女人久久| 玖热精品综合视频| 就爱操www com| 六月婷婷五月丁香| 五月天色五月天| 日本不卡一区二区三区| 色婷婷狠狠久久综合五月| 婷婷香草网| 激情五月天之五月婷婷| 99久| 综合99久久天天综合| 日韩在线99| 婷婷99视频精品| 狠狠操综合| 26UUU欧美激情一区二区| 人妻精品在线| 爱草视频在线| 狠狠综合久久综合| 九九色精品| 人人爽人人射-美女久久久久久久久久-成人AV| 亚洲妇女熟BBW| 新激情五月天色播| 99精品人人| 狠狠色噜噜狠狠狠888| 色播播之激情五月婷婷| 欧美操我| 91一起操| 伊人色综合网| 免费99情趣网视频| 东北黄色一级| 久久久婷| 99热在线观看免费精品| 深爱五月婷婷开心中文字幕| 婷婷六月偷拍| 久热只有精品| 久色婷婷200| 日韩精品999| 三男玩一女三A片| 情婷婷五月天| 亚洲精品色色| 97丁香五月| 婷婷五月丁香五月天| 久久久久久婷| 色婷婷激情| WWW,婷婷,COM| 狠狠 婷婷| 青青艹b| 99re8这里只有精品99re8热视频| 99色视频免费在线规看| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 丁香久月| 丁香五月亚洲综合丝袜| 日本五月婷| 人人草人人爱手机视频看看| 日韩九九视频| 欧美超级视频97| 欧美成人AAA片一区国产精品| 超碰国产av| 天天做天天爽| 久久婷丁香五月| 天天日天天操天天干| 九九热re99re6在线精品| 在线18av | 99九色视频在线观看| 色综合久久久久久久久五月| 99丁香五月婷| 婷色五月| 色色丁香婷婷| 久久综合色五月| 七月婷婷色香综合网| 九九热中文| 99热这里只有免费精品| 五月亭亭激情综合| 99超在线| 久热只有这里有精品| 色色综合激情| 俺去婷婷 丁香| AA片在线观看视频在线播放| 五月激情在线| 激情五月综合网| 在线观看婷婷5月| 色播婷婷五月天| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 九九热视频思思| 二人电影免费版在线观看| 非洲一级AV| 免费观看2018www黄色操逼网站| 少妇水多A片太爽了| av在线资源| 婷婷六月色| 狠狠狠狠狠狠色| 99免费在线| 天天爽天天干天天| 色 色 色综合com| www.丁香五月| 97碰碰在线观看视频| 婷婷五月天免费99| 91九九九九九九| 丁香五月激情久久麻豆| 99惹 精品在线| 精品9197碰| 99国产精品久久久久久久久久久| 久久艹 五月天| 五月丁香| 狠狠爱青青草| 九九色黄色| 1024成人免费看| 99这里只有精彩视频| 久久人人人人妻| 日本噜噜色网| 丁香六月五月婷婷| 超碰在线综合| 深爱五月激情| 久久99热这里只频精品6学生| 97干在线视频| 亚洲午夜在线视频| 成片免费观看大全| 生活片五区| 六月丁香深深爱综合网| 五月天激情小说电影| www.伊人天堂偷偷婷婷| 99热这里只有精品最新地址获取| 狠狠草在线观看| 亚洲激情综合| www五月| 思思久久99热只有频精品66| 婷婷五月精品| 婷婷综合网站| AⅤ色区| 99re在线免费视频| 五月丁香啪综合| 九九精品网站| 五月综合六月婷婷| 激情99| 九九综合久久| 热996精品在线观看| 伊人婷婷大香蕉| 婷婷五月成人色综合| 99热青青草原| 欧美色99| 国成人网| 最新日本A片| 六月丁香激情综合| 激情九月综合| 久9草在线观看视频| 亚洲成人高清在线| 丁香五月六月欧美| 亚洲AV成人精品日韩在线播放| 荫道BBWBBB高潮潮喷| 久久久潮喷-久久久九九-成人AV| 亚洲av免费在线| 五月丁香色五月| 久久这里只有精品热在99| 五月丁香久人妻中文| 五月开心婷婷| 91精品综合久久久久久五月丁香| 亚洲精品第一国产综合亚AV | 大香蕉AV电影在线| 五月丁婷香| 五月丁香淫淫婷婷婷| 婷婷五月天丁香| 色亭亭丁香五月天| 天天干,噜噜色,狠狠色| 无码激情| 一本色道久久综合狠狠躁小说| 五月丁香怕啪啪| 美女五月狠狠| 天天综合网~91| 婷婷五月天成人在线视频| 亚洲色无码| 99操碰| 99热插| 99热久草| 国产精品久久久爽爽爽麻豆色哟哟 | 五月天成人在线| 无码任你操| 91天堂网综合| 激情五月天婷婷丁香| 丁香5月激情网| 久久天天| 久久人人添人人爽添人人片αV| 天天综合情| 日日干日日| 视频一区二区在线| m色激情网| 色色丁香| www.天天干.com| 色5月婷婷色| 夫妻超碰在线| 无码操B| 婷婷丁香六月天| 少妇日麻屄| 精品久久99码| 五月丁香大香蕉| 97色女人在线| 超碰九九热| www.日本91| 激情五月婷黄版| 五月天婷婷婷| www.五月婷| 99热这里有精力| aaaa久久| 色色色色av色色色色| 曰韩五月丁香色婷婷无码| 日本婷婷综合精品| 五月丁香六月片| 91夫妻视频| 国产日批视频| 超喷97免费在线视频| 伊人超碰| 中文AV网站| 欧美国产一区二区三区| 91热久| 激情五月天婷婷丁香 | 激情超碰网| 丁香婷婷视频在线| 久婷婷婷| 亚洲色爱综合| 九九综合网| 天天操天天爱天天玩| 色婷婷五月天av在线| 五月综合激情综合久| 婷婷六月插屄激情| www.久久99精品| 丁香婷婷深情五月亚洲| 日韩高清成人| 色综合婷婷| 婷婷玉月丁香五月在线视频| 久久精99| 超碰成人电影| 久婷婷久草| 玖玖@三月天天丁香婷婷| 色五月丁香六月欧美综合| 六月婷婷AV| 色停停香蕉视频| 搡BBBB搡BBB搡五十| 亚洲成人电影aaaa| 视频在线免费观看欧洲乱码| www久| 色五月五月丁香| 日本久碰| 97热视频| 99热日韩| 超碰大香蕉网| 色婷婷五月天av在线| 久草热在线视频| 成人做爰A片免费看网站找不到了| 天天色情站| 99免费| 五月六月播婷婷| 97caop| 激情五月天色播| 色情五月天视频网| 久久婷婷综合拍| 天天操天天操天天操天天操天天操 | 六月婷婷激情| 高清无码网址| 五月丁香久久久日婷婷久久婷婷日| cao视频,现在观看| 任你爽视频| 五月激情婷婷丁香天堂| 久热这里只有精品在线观看 | 色婷婷五月中文字幕在线dvd| www婷婷| 婷久久高清| 五月婷婷啪啪| 九月激情综合| va亚洲中文在线| 开心久久xxx色| 99玖玖人人| 九九在线视频| 色色色欧美| 日本颜色视频人人爱| 午夜理论片最新午夜理论剧 | 偷偷狠狠久久婷婷五月天| 五月丁香婷婷综合网色欲| 丁香五月天啪啪| 国产avapp 网| 丁香六月情| 天天模,夜夜模夜夜爽| 伊人激情啪啪| 亚洲无aV在线中文字幕 | 99玖玖人人| 伊人99久久| 天天干天天做| 九九视频在线观看| 久久久久激情| 九九热视频在线观看| 久久婷婷五月草视频| 激情综合五月激情| www久久99| 97日在线视频| 久久机热/这里只有精品| 熟女五月天久久综合| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 武则天精品久久| 99啪在线| 成人网页在线观看| 91日综合欧美| 一本九九色| 精品热青草| 欧美A级成人婬片免费看理论| 任你艹| 天天干天天干天天干| 天天色播| 丁香五月成人网| 五月天综合婷婷| 特黄三级片| 日韩成人AV在线| 在线视频另类| 伊人激情| 激情综合亚洲| 性按摩玩人妻HD中文字幕| 北京熟妇搡BBBB搡BBBB | 色九九中文字幕| 91干婷婷| 国产三级在线播放| 九9九9无码| 99啪99| 婷婷色九月| 激情久久五月天| 婷婷午夜丁香| 日本色色色| 99啪啪| 99亚洲天堂| 99性爱| 久99久视频精品| 色五月激情图片| 丁香婷婷午夜| 操人91| 77799热| 天天操夜夜爽| 91热网址| 九月婷婷久久| 五月婷婷影视| 激情婷婷网| 欧美影院婷婷| 天天日夜夜草进麻麻的子宫| 五月天基地| 五月性色| 婷婷五月天AV| 色婷婷综合久久| 激情五月婷婷啪啪| 婷婷五月天最新综合你懂的 | 成人丁香婷婷五月天| 99热97| 天天激情站| 亚洲精品一区中文字幕乱码| 久久精品五月| 女人露出p毛视频www网站| 五月天自拍视频| 五月性色| 丁香五月婷婷基地| 蜜桃人妻无码AV天堂三区| 97人人超| 在线超碰免费| 色色综合色视频| 久狠日av| 另类视频五月天| 任你干线上免费视频有3吗| 香蕉狠狠爱视频| 天天干天天干天天干天天干天天干天天 | 桃色Av色哟哟| 激情五月天婷婷丁香| 天天综合网站| 激情啪啪五月天| 亚洲色爽| 久久久久亚洲AV成人无码电影| 三男玩一女三A片| 亚洲成人在线综合| 99精品爱| 丁香五月天啪啪| 亚洲婷婷丁香五月| 色婷婷伦理| 丁香五月婷婷啪啪啪| 91九色 熟| 性爱在线播放av| 久草狼人| 婷婷五月色花丁香社区| 无码毛片992367| 婷婷九月激情| 狠狠久综合| 天天干天天操天天上| 99久久6| 免费AV在线网址| 五月婷婷六月激情网| 色五月婷婷婷婷婷婷婷婷婷婷| 我爱va亚洲va52| 五月丁香啪啪网| 七七色色综合| 欧美成人网99网| 无码免费人妻A片AAA毛片西瓜| 色五月综合在线| 丰满人妻一区二区三区| 伊综合蕉| www.五月天。com| 91日韩在线| 久操大香蕉| 俺去也综合| 五月色情婷婷| 六月丁香婷婷六月激情综合| 99久久国产宗和精品1上映| 深爱五月月天| 九九九九这里只有精品| 大香蕉五月婷婷| a久久| 综合精品99| 色五月丁香六月欧美综合| 丁香五月婷婷国产av| 天天在线久久综合 | 久久最新色色色| 久热99| 丁香五月激情婷婷| 成人亚洲精品| 色啪综合| 直接看的av| 五月丁香综合啪啪| 色婷婷色99国产综合精品| 激情综合网五月在线播放| 丁香婷婷五月综合色情| 婷婷五月天av| 五月天色影院| 99热99日…..| 疯狂做受XXXX高潮A片动画| www.激情五月天.com| 亚洲另类在线观看| 日韩六十路91性交电影| 艹B高清无码| 五月天激情子轮| 久久爱综合| 激情五月六月| 综合久| 五月丁香影院| 密桃激情五月天综合网| 一区二区乱视频码| 日亚二欧美| 开心五月婷婷激情| 久久婷婷五月天| 色情激情五月| 色综合久久88| 激情久久久| 婷婷舔| 日逼影音先锋AV男人资源站| 欧美影院| 夜夜躁狠狠| seuuu婷婷| 天天日天天草| 欧美性二区| 97在线观视频免费观看| 亚洲色爱综合| 99re这里只有精品99| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 五月婷婷九月婷婷九月婷婷| 啪啪五月综合| 91蜜桃婷婷狠狠久久综合9色| 五月开心六月婷婷在线播放网站| 久久综合26p| 日韩精品一区二区亚洲AV观看 | 国产偷人妻精品一区| 综合网色| 色五月丁香A欧美com| 1024操逼视频| 夜夜www| 色色色色区| 色婷婷久久| jiqingliuyuetian| 精品视频这里只有精品| 伊人在线另类| www久久99| 另类视频丁香五月| 综合色图区| 性爱技巧五月| 婷婷五月天堂| 五月丁香六月激情欧美综合| 亚洲一个色| 婷婷丁香婷婷97| 五月婷在线观看| 91人人爽久久涩噜噜噜| 亚洲色色在线| 91精品久久久久久久久久久久| 精品亚洲国产成AV人片传媒| 五月综合视频| 久久精彩视频99| www.91色| 五月丁香六月婷婷的女人| 五月丁香| 99热在线精品观看| 丁香六月成人| 激情综合婷婷| 久操热| 色综合色色色色| 精品二区| 综合激情五月丁香| 久艹大香蕉| 五月天五月天成人网亭亭成人色网站| 日日操夜夜爽白洁| 亚洲AV网站在线观看| 婷婷婷久久| .精品久久久麻豆国产精品| 日日干天天射| 丁香婷婷情色五月天| 伊人狠狠综合| 99re这里只有精品国产99| 大香蕉网站,大香蕉综合| 亚洲视频码| 色五月丁香A欧美com | 婷婷五月天亚洲激情戏精品| 《诡秘之主》在线观看| 久久久久8888| 久草五月天| 激情婷婷黄色五月| 第九色区AV在线| 亚洲精品国产熟女久久久| 很很干天天干| av中文在线| 九九99九九99九九99视频网| 可以看的av| 五月丁香婷婷综合网| 精品国产va久久久| 欧美激情凹凸丁香网| 99视频精品8| AV五月丁香| 色婷婷最爱五月| 爱爱色五月天| 国产精品五月丁香| 婷婷五月天Av| 五月天自拍网| 六月婷婷日| 精品综合久久久久久五月天| 性小说五月天| 青草视频在线蜜臀| 人人干AV| 丁香五月婷婷骚视屏| 婷婷丁香五月天在线| 日逼免费视频| 2025天天操| 欧美丁香婷婷五月天| 天天插天天插天天插天天插| 婷婷丁香人妻天天爽| 青青草成人网| 久久久精品AV| 日韩色色视频| 久久精品99国产精品日本| 香蕉久久国产AV一区二区| 一本大道伊人AV久久综合| 六月婷综合| 超碰永久在线| 久久99激情| 五月大香蕉| 丁香丁香激情网| 99久久成人| 五月婷婷天| 久久婷婷内射| 天天爽天天爽| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 五月婷婷激情网| 乱乱av| 色婷婷色丁香色欲av| 色噜久| 三级三久久线久久99久目本WW| 欧美精品999| 多精窝99在线视频| 这里只有精品在线看| 色婷婷五月天久久| 色色日本| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 激情小说五月天| 蜜桃五月天| 丁香九色不卡aaa| aaa久久| 五月天六月天| 五月婷激情| 天天日天天色| 久久婷婷艹| 另类视屏| 婷婷欧美色| 激情99在线视频| 亚洲中文av| 中国女人内射6XXXXX| 青青草网武则天| 99热在线爱| 色噜噜狠狠插综合| 日日.c| 午夜激情四射影院| 亚洲成人网站在线观看| 激情五月天色爱| 婷婷九月亚洲| 五月婷婷综合激情小说| 五月久久婷婷丁香| 欧美日本一区二区三区| 91热久久| 日韩人妻在线播放| 激情综合青草| 日欧大屏操| 中文字幕日产A片在线看| 九热视频精品| 婷婷激情五月综合基地| 九九re精品视频在线观看| 色婷婷性爱网| 99热99ai| 婷婷五月天情色| 七月丁香五月婷婷在线| 久久久久9999| 天天摸天天透天天舔| 日本欧美成人片AAAA| 婷婷伊人综合中文字幕| VfJxEwPH| 一本大道熟女人妻中文字幕在线 | 丁香五月婷婷姐| 六月撸婷婷| 久久婷综| 久久五月网| 99久久9| 91日韩美女被插视频| 中文字幕 久久9999| 玖玖热视频| 亚洲av日韩无码| 色爱五月天| 亚洲成人在线观看av| 五月天激日本色情在线| 大香蕉久久久久| 激情五月婷婷啪啪| 日本va欧美va欧美va| 乱精品一区字幕二区| 色亚洲无码| 亚洲午夜视频| 色欧美影院| 第五色色色婷婷| 微拍92| 五月天激情开心网| 天天躁日日躁狠狠躁日日躁2022年5月9日| 九九色热| 久久一热| 久婷五月| 色五月婷婷丁香五月| 91婷婷色五月| 日本久久人人| 婷婷五月色影视先锋| 九九热精品视频在线观看| 色 噜噜 九月 婷婷| 丁香五月天天高清在线| 日本三级第一页| 五月婷婷乱| 香蕉久操| 激情五月婷婷综合网| 亚洲国产精品VA在线看黑人| 色婷婷婷婷成人网| 人妻丰满精品一区二区A片| 综合五月天亚洲婷婷| 婷婷五月天伊人| 激情欧美婷五月| 国产乱妇乱子在线播视频播放网站| 亚洲亚洲激情| 成人αV视频免费观看| 深爱激情五月天婷婷网| 操日本99| 五月天综合在线观看| 伊人三级激情| 99热最新精品| site:pzdcoin.com| 影音先锋女人AA鲁色资源| 色狠狠综合网| 婷婷五月天黄色小说| 婷婷亚洲在线| 99久在线精品99re8热| 五月天激情啪啪| www99精品| 五月婷婷激情刺激| 国产精产国品一二三在观看| 欧美噜一噜| 墨西哥毛片内射精| 色噜噜狠狠色综无码久久合欧美 | 天天弄天天爽| 麻豆AV一区二区三区| 久色五月| 久久色五月天| 日日操夜夜撸| 久久网思思| 久久9999| 99无码视频| 丁香五月,激情五月,深爱五月| 五月色婷婷夜色| 婷婷色网站| 综合久色五月| 九九综合五月欧美| 99re久久| 伊人丁香花综合影院| 人人干人人操外国| 久久99精品九九久久久婷婷| 综合久色五月| 亚洲无码激情| 婷婷五月天福利| 99免费热视频| a在线观看| 黄色录像网点| 五月丁香激情四射| 婷婷色色播五月天| 2015WWW永久免费观看播放| 久久九九国产精品怡红院| 婷婷五月骚厕所| 久久久激情视频| 久草婷婷网| 91玖玖| 伊人网色婷婷五月天| 激情久久久久久| 日本一级淫| 亚洲99综合| 精品99只有。| 亚洲永久免费| 中文字幕人妻一区二区| 色情五月婷婷| 激情综合丁香五月| 色频玖玖五月天| 91人碰| 操人妻AV| 色五月婷婷丁香五月| 丁香五月婷综合网| jiujiu无码五区| 日韩人妻无码精品| 婷婷五月综合中文字幕| 久久久这里有精品| 五月婷婷啪啪| 26uuu欧美亚洲日韩| 日日噜狠狠| 激情碰碰碰| 国产精品日本一区二区在线播放 | 丁香五月天啪啪| 可以直接看的av| 夜夜夜夜操| 丁香六月婷婷一区| 婷婷网影院| 婷婷丁香精品视频在线观看| 大香蕉伊人久久| 色综合综合色| 成人va视频| 五月天停停基地| 亚洲婷婷丁香五月天激情小说| 99九九玖玖| 无码一级片| 婷婷五月丁香基| 国产精品久久久久久久久久久久| 五月丁香六月婷| 激情网五月天| 天天做天天爱天天爽综合网| 开心五月丁香婷婷| 激情五月激情综合网一级丸片 | 最近中文字幕2019视频1| 亚洲色在线观看| 婷婷色丁香五月| 免费观看的av| 色色亚洲五月天| 亚洲A色| 丁香五月第四色88| 桔色成人官方网站| 99热这里只有精品手机在线观看| 啊v视频在线观看| 伊人久久大香线蕉av最新| 色婷久| 丁香五月黄色| 97日本在线| 六月丁香开心婷婷欧美| 99ri精品在线观看| 五月天大香焦| 日本久碰| 影院久久久| 97成人超碰免| 婷婷影院欧美| 日本97久久久精品| 99re热在线视频观看| 97人妻碰碰碰碰碰久久久久久| 97人人操人| 婷婷 丁香 久久| 99人妻碰碰碰久久久久视| 欧美天天搞| 日本久久视频| AV在线资源| 色婷婷基地| 丁香六月天AV| 五月丁香婷婷成人伊人网| 97深爱伊人综合| 婷婷五月色亚洲| 五月丁查人人| 99在线免费观看| 日本婷久久| 色色A| 国产SUV精品一区二区6| 天天揷综合网| 色五月色五天色情网址| 久久人操-久草婷婷-成人AV| www久久艹| 午夜丁香婷婷| 婷婷五月开心中文字幕色| 【乱子伦】黄色| 四季日韩AV无码综合| 久久午夜丁香| 婷婷色网站| 丁香五月婷婷动漫视频| 91精品国产综合久久密臀| 欧美美美女性色视频| 色九亚洲| 99爱爱| 99热10在线高清播放| 九九99在线视频| 色九区| 欧美综合五月丁香五月天| 亚洲色优| 99爱视频在线| 色一色综合| 国产无人区大片| 插插插丁香五月婷婷| 草做免费在线观看| 色色免费网站| 国产欧美性成人精品午夜| 狠爱婷色| 青青草原中文字幕| 情涩婷婷五月天| 久久大香蕉同僚| 国产伦亲子伦亲子视频观看 | 久久精品系列| 五月六月丁香激情视频| 亚洲aV写真天天综合网久久| 日韩成人中文字幕| 中文字幕无码AV| aaa久久| 丁香五月婷婷天激情| 久9热视频| 国产伦亲子伦亲子视频观看| 国内久久亭亭| 婷婷涩涩网| 欧美啪啪9| 操逼五月婷婷| 丁香五月综合婷婷| 丁香美女主播视频在线观看 | 婷婷五月天午夜激情影院| 九九热这里精品| 婷婷激情综合| 国产精品久久久久久久久久| 亚洲综合一区二区| 色综合久久天天综合网| 99ri国产在线| 久久丁香网| 日日操夜夜爽白洁| 亚洲天堂色色| 无码少妇高潮喷水A片免费| 婷久久| 天天色综网| 国产精品18久久久| 一级性感黄色内射视频| 不卡影院午夜理论片| 日日夜夜狠狠| 九色七七| 狠狠干综合网| 内射干少妇亚洲69XXX| 色综合区| 亚洲激情五月天| 亚洲免费综合一区| 久久九九网| 婷婷色一二三区波多野结衣| 婷色成人| 五月综合色| 九九99香蕉在线视频播放| 丁香五月中文字幕久色| 97人人射| 五月大香蕉| 99只有这里有精品在线视频| 婷婷五月丁香青青草在线| 亚洲色婷婷色| 啪啪激情综合| 色婷婷色综合激情91| 丁香婷婷视频一区二区| 开心五月色婷婷综合开心网| 五月天婷婷久久| 日韩av在线电影| 色涩影院六月丁香| 激情婷婷五月社区| 大香蕉五月婷婷丁香| 五月色无码| 精品人妻伦一二三区久久| 午夜丁香| 国产一级片| 亚洲操逼片| 狠狠色狠狠| av在线观看网站| 91狠狠色丁香| 日韩黄色网络| 狼人婷婷综合| 日韩精品一区二区亚洲AV观看| 五月天网站亭亭| 日韩成人影片在线观看| 在线可以看的av网址| 久久久精品婷婷五月天| 五月天激情.com| 97成人操| 婷婷五月视频| 五月久久| 第五色婷婷| 天天肏天天肏天天肏| 五月婷婷激情久久| 97碰久久| 超碰九色|