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
返回資訊列表
九色激情网| 久久久91| 五月色影院| 亚洲国产婷婷色五月| 色五月天电影| 五月天激情小说欧美激情| 国产免费一区二区三区三州老师F1F1.CC| 婷婷中文字幕| 婷婷激情丁香六月| 五月天自拍视频| 操逼五月天| 丝袜大香蕉| 色五月综合网| 亚洲激情丁香五月基地| 欧美操人| 伊人五月综合网| 色人久久| 五月丁香综合激情网| 亚洲综合狠狠艹| 超碰无码318604| 欧美狠狠一在草| 亚洲熟妇AV乱码在线观看| 97 A I色色| 婷婷五月色| 99re在线免费视频| 超碰人人插| 精品久久艹| 婷婷五月天在线综合| 久久综合激情| 五月丁香999| 欧美色碰| 日熟女| 99激情| 91视频一起草| 久色网址| 久久色情| 狠狠色色| 久久久中文| 1区2区视频| 久草xx性爱视频| 亚洲色激婷| 97超碰在线免费观看| 婷婷五月在线影院| 丁香六月成人| 无码字幕中文| 五月婷婷黄色毛片| 国产综合81p| 亚洲天堂有码| 婷婷九月在线| www色五月| 婷婷激情五月天小说| 国产成人AV不卡| 婷婷久久网| 亚洲99热| 六月丁香啪啪啪| 欧美激情综合色综合啪啪五月| 99爱在线视频观看| 婷婷狠狠97| http://www.sd-xiangsu.com/| 好吊丝aV| 婷婷五月另类网站| 97五月久久丁香婷婷| 色色色.COM| 三区激情四射av| www.久久99| 久激情网| 综合五月天天天天天五月| 欧美狠狠草| 噜综合| 99热精品网| 一级黄色影片| 天天干天天射综合网| 干婷婷五月天| 无人精品在线视频| 99久热这里只有精品| 欧美啪啪9| 人人操日| 丰满少妇乱A片无码| 天天干天天插| 婷婷狠狠97| 婷婷六月视频| 五月婷婷在线短视频| 26uuu国自产精品| 天天色·欧美| 天天做夜夜爽| 色婷婷激情| 久久xxxx| 久草嫩草在线观看| 婷婷五月天av网| 久色成人| 变态另类9| 天天色亚洲| 91中文在线| 610018岁成人视频| 亚洲午夜视频| 五月深爱网| 国产精品久久久海的味道| 婷婷五月色综合| 噜噜在线| 天天肏高清在线| 99色色网| 色中色综合| 久久激情视频| 激情AV中文| 成人做爰A片免费看网站找不到了| 99热久久这里只有精品| 九九色图| 九 九九九AV| 美女网黄| 日本婷婷| 婷婷五月天基地| 色激情网| 狠狠干在线视频| 欧美三级欧美一级| 欧美123区免| 色久婷婷五月| 六月婷婷激情| 色色色区| 美女丁香五婷婷| 久久激情综合| 色婷丁香| 色老久久| 丁香五月手机视频| 牛牛碰免费| 丁香色婷婷五月天| 色五月激情综合| 深爱激情五月天色婷婷| 可以免费观看的AV| 秋霞成人毛片一级A片| 久久这里99| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 天堂婷婷综合| 俺五月| 久草天堂| 97人妻碰碰碰久久香蕉| 色色a| 碰97 久| 97伊人综合婷婷| 成人色五月天| 欧美性生交XXXXX无码小说| 九九十99视频| 五月婷婷激情| 伊人久久五月天| 狠狠操性爱av| 日本天堂久久| 丁香五月六月综合激情| 久久99日本精品视频免费观看| www..com色爱| 五月丁香网站| 六月综和久久| 色日本颜射| 色丁香五月婷婷婷| 思思热在线视频精品| 五月婷婷激情久久| 91久热| 97色啪| 五月丁香五月婷婷在线观看| 操日本色| 伊人五月婷婷| 色愛综合网| 色五月天丁香| 色热久资源| 色婷婷综合网| 日日撸天天干| 禁片二区| 婷婷久久精品| 色欲人妻综合aaaaaaaa网| 激情综合色图| 噜噜色天天开心| 五月丁香91| 九九自拍网| 久九色| 色色色欧美| 99热这里只有精品22| 国产成人AV在线| 五月停停色色丁香| 婷婷五月天激情综合婷婷五月天激情综合| 国产日产亚洲系列最新| 色综合色| 丁香五月日啪| 涩 五月 婷婷 狠狠| 有哪些A片网站| 天天日天天爱天天噪| 大地资源色婷婷视频在线| 人妻videos人妻高清| 国产欧美日韩综合精品一区二区| 深爱激情婷| 综合色影院| 97干在线| 五月天社区狠狠| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 五月综合亚洲色| 99热最新网址| 无人精品在线视频| 婷婷色五月噜噜| 一本色道久久88综合日韩精品| 婷婷五月激情欧美大胆视频| 玖玖婷婷五月天毛片| 天天做好综合色| 色色九九五月天| 99综合视频| www.热99热| 久久9999| www五月婷婷| 天天日天天爽| 五月丁香网站在线播放| 婷婷中文无码| 五月丁香综合网| 99久久极情精品一区| 九九精品亚洲| 五月婷婷综合色拍| 婷婷六月综合| 99久久婷婷国产综合亚洲| 婷婷色导航| 玖玖国产视频一区| 玖玖婷婷婷丁香五月| 久久婷婷热| 99热这里只有是亚洲国产| 99人人操人人操人人精| 九色成人AV在线| 丁香五月色色| 天天狠狠六月婷丁香影院| av九九| 中文字幕精品无码一区二区| 色色免费网站| 久久久无码精品成人A片小说 | 国产激情在线| 久久免片| 婷婷五月天亚洲综合| 国产婷婷综合在线免费视频| 操逼电影免费看| 99综合视频| 天天cha成人综合网| 影音先锋91| 亚洲精品a成人在线播放| WWW免费视频碰碰碰碰| 深爱丁香激情| 亚洲第精品| 六月丁香激情综合网| 激情超碰网| 风流少妇A片一区二区蜜桃| 婷婷五月综合久久中文字幕| 婷婷99狠狠| 99热九九在线| 久久九九大香蕉电院| 99色在线观看| 一区色色色色网| 国产精品人妻在线网址| 2013AV天堂| 99操九九网| 五月天啪啪| WWW.五月com| 无码少妇高潮喷水A片免费| 五月天丁香久久| 这里只有精品视频在线看| 99国产小视频免费观看| 激情的五月婷婷蜜桃| 外国碰视频网站97| 久久久五月天婷婷成人网| 国外亚洲成AV人片在线观看| 公的粗大挺进了我的密道| 六月婷婷激情| 精品影院| 亚洲在线网站| 99视频在线观看视频| 婷婷在线中文字幕| 日噜噜色| 青青草原伊人网| 2015WWW永久免费观看播放| 97色射| 久热re视频在线观看网站| 日日躁夜夜躁狠狠久久AV| 婷婷色色网| 婷婷深爱五月| 精品久热| 97色婷| 欧美久久婷婷| 啪啪啪综合网| 99热只有这里有精品| 天天日夜夜草进麻麻的子宫| 久久在线视频只有这里有精品| 日韩色五月| 婷丁香五月天| 991国产精选视频在线播放下载| 婷婷五月天久久| 密乳视频| AV79| 夜夜夜夜夜骑撸| 九九亚洲小视频| 丁香五月天激情网址| 99热在线精品播放| 91视频综合网| 操久久精| 色欲婷婷五月天| 99男人的天堂| 久久9视频欧美| 啪啪六月婷婷| 91碰在线| 永久思思热在线| 婷婷五月色情天| 99玖玖免费视频| 日韩av网站在线观看| 久久婷婷五| 日本99婷婷| 91综合网| 色婷婷超碰| www.99精品视频| 色婷av| 婷婷七月丁香色色| 中文字幕 码精品视频网站| 人妻久热| 亚洲激情亚洲激情| 天天摸日日舔狠狠添婷婷婷| 亚洲欧美999| 欧美美美女性色视频| 五月丁香婷爱在线| 欧美日韩成人在线观看| 五月丁香黄色视频| 亚洲视频在线观看| 青青草99re| 操逼综合网| www.久久9| 亚洲AV免费在线| 66色在线日韩| 亚洲av骚货| 久热伊人| 久久密臀婷婷| 九色婷婷| 激情综合网激情五月欧美| 免费观看的AV| 五月丁香激情综合啪啪| 亚洲综合色婷婷| 99re6在线视频精品免费| 激情六月婷婷啪啪| 婷婷色五月开心五月| 91 九色 熟女| 五月丁香激情婷婷综合| 另类五月激情| 久久久激情| 国产精产国品一二三在观看| 五月丁香婷婷啪啪综合| 色丁香五月婷婷婷| 99热免费在线| 久久精彩免费视频| 婷婷99丁香| 丝袜大香蕉| 狠狠狠狠免费| 九九热这里只有精品31| 97精品欧美91久久久久久久| 久色精品| 99热播放| 天天综合天综合| 国产激情在线| 欧美十二区| 伊人久久大香线蕉av一区| 老司机午夜福利视频金瓶梅| 激情小说婷婷| 色综合开心五月深爱五月| 九九热在线视频观看| 久热无码| 亚洲黄色av网站| 任你搞网站| 插插干干干色| 二色AV| 狠狠干最新地址| 99视频九九热| www.99热视频| 精品香蕉99久久久久网站| 99人妻碰碰碰久久久久视| 丁香五月婷婷啪| 婷婷久久草| 婷婷五月天成人| 婷婷五月a| 国产精品久久在线观看技巧| 久久久精品AV| 超碰人人操人人9| 欧美va国产va| 五月天另类小说| 98热精品| 这里只有精品视频一区| 亚洲黄色影视| 色综合久久久久| 成人丁香婷婷| 97操资源婷婷| 爱草视频在线观看| 99这里| 六月激情婷婷综合| 亚洲小说欧美激情| 日本人妻伦在线中文字幕| 国产精品国产| 狠狠干夜夜干| 波多野结衣成人作品在线| 精品一二三区视频立| 色五月五月天色婷婷色五月| 丁香六月婷婷久久亚洲天堂| 婷婷丁香激情五月天色色| 超碰在线成人| 欧美色图45678| 激情综合网五月| 色五月综合激情网| 亚洲成人乱码av网站| 丁香六月婷婷久久综合| 日本va欧美va欧美va精品| 天天婷婷综合亚洲亚洲| 丁香五月六月综合激情| 壅壅儕家a| 日韩综合大黄| 玖玖99婷婷| 99re思思在线视频| 午夜免费试看| 4399高清无码视频| 婷婷欧美| 成人精品人妻| 五月丁香啪啪啪啪| 亚洲精品国产成人AV在线| www.色婷婷| 一级性感毛片| 欧美丁香五月| 九九热中文| 久久久久久9| 99精品97| 日韩999| 色九网| 九九色图| 九月丁香婷婷综合激情| 丁香六月综合激情| 婷婷五月天a| 天天揷综合网| 五月天激情电影| 黄色五月婷| 狠狠草在线观看| 免费99色| 五月天丁香网站| 五月色婷婷影院| 丁香激情久久| 亚洲va日| 无码 av电影| 丁香五月婷婷欧美成人色图| 波多野结衣成人作品在线| 婷婷五月激情视频| 五月丁香综合激情网| 久激情网| 很很干在线视频| 思思久久青草热| 丁香五月婷婷国产av| 天天草天天舔| 五月婷婷激情在线| 青青草轻轻操| wuyuedingxiang99| 黄色片avv| XX色综合| 色色色色热热| 亚洲av另类在线观看| 99A片| 色碰干| 这里只有精品视频在线| 性 色 婷婷| 色九四色| 99激情网| 色五月五月丁香| 九九99视频精品| 亚洲99在线| 99热 这里只有精品 国产 日韩| 久久人妻精品| 丁香成人五月天| 99热日韩| 99干在线视频| 九九re精品视频在线观看| 色五月成人婷婷| 99A片| 婷婷伊人综合中文字幕| 亚洲色欲欧美一区二区三区| 69人人操人人爽| 婷婷综合网站| 久久丁香五月婷| 中文字幕av在线| 久草热8精品视频在线观看| 婷婷五月av| 丁香五月天啪啪| 日韩AC在线免费观看| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 色天天狠狠干| 超碰97久久| 国产av天堂| 婷婷狠狠色| 秋霞学生妹一二级| 色五月婷婷自拍| 三人荫蒂添的好舒服A片| 久久人妻人人| 亚洲婷婷丁香五月视频| 亚洲操逼网| 超碰97在线观看免费| 久热成人| 色天五月天在线观看视频| 久久久妻人人人| 色婷婷AⅤ| 涩涩五月天| 99九九玖玖| 99色免费视频| 天天 日综合| 天天综合 99久久婷婷| 欧洲电影在线观看免费版英语版 | 美妞av| 综合激情肏逼网| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 9999久久久久| 色婷婷亚洲婷婷| www.久久66| WWW,色五月| 91丨九色丨老农村| 丁香五月伊人| 五月婷婷亚洲天堂97色婷婷| AV大香蕉| 伊人久久艹| 成人版视频在线观看| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 另类图片激情五月| 九九99男女视频在线观看| 超碰在线观看三级片| 直接看的av| 欧美日本国产欧美日本韩国99| 激情丁香五月婷婷啪啪| 伊人丁香婷婷东京| 白天AV月月| WWW,五月天| 婷婷五月天激情电影| 操婷婷基地| www.婷婷五月.com| 婷婷99狠| 99资源人人| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | AA片在线观看视频在线播放| 欧美激情性做爰免费视频| 九九这里有精品| 久久停停超碰| 久久免片| 丁香色色网| 九九热在线精品视频| 婷婷五月天色| 九九在线精品| 极品少妇高潮啪啪AV无码| 五月天色丁香| 超碰人人草| 狠狠色狠狠操| 激情丁香五月婷婷| 熟妇人妻中文字幕无码老熟妇| 丁香五月色| 99热成人| 最新无毒无码AV| 综合久久狠狠| 热99一二三| 亚洲成人在线在线| 亚洲正能量欧美| 久久成人亚洲欧美电影| 91婷婷五月丁香碰| 大香蕉五月婷婷| 久热 91| 欧美色图天堂网| 久久大香蕉视频| 国产精品操| 97啪啪| 亚洲视99| 甈你aaaaa| 五月丁香六月婷婷视频| 久久精品性爱| 色婷婷久久久| AA片在线观看视频在线播放 | 9久国产精品| 99精品在线播放| 丁香婷婷久久| 99久久超级| 色婷婷丁香社综合| 伊人99热| 丁香五月丁香伊人| 播五月丁香三月婷婷| 第四色激情网| 国外亚洲成AV人片在线观看| 激情婷婷。| www.色婷婷.com| 开心婷婷五月天综合| 天天婷婷天天| 婷婷激情小说| 99久久极情精品一区| 婷婷五月天开心网| 久久5 9视频免费观看| 久久9热综合| 欧美va视频| 开心激情色婷婷五月天| 五月天激情啪啪| 日日做夜夜爱| 91人操人人人操人| 性做爰1一7伦| 99热热这里只精品996小说| 五月6香色婷婷视频| 日夜夜天天| 婷婷狠狠97| 色99视频| 婷婷综合日本| 亚洲视频丁香网va| 婷婷色片| 蜜乳av一级av| 国产成人网| 人人人人人人人草| 第四色五月天| 六月丁香婷婷综合影院| 狠色狠色狠狠色综合网| 狠狠干,狠狠操| 日日夜夜干| 亚洲无码yw| www.99热最新视频8| 天天操天天曰| 丰满人妻一区二区三区| 色婷婷四色| 天天综合干| 久99久在线观看| 激情AV网| a色色色色色| 99热在这里只有精品| 五月婷婷激情网| 九九偷拍网| 五月天色婷婷av| 99视频35精品视频在线观看| av亚洲国产小电影| 色综合久久888| 狠狠狠狠狠狠狠狠| 亚洲三级无码| 国产1区2区3区在线观| 色五月AV| 亚洲中文字幕在线观看| 激情小说五月天| 天天日 天天草| 九九婷| 欧美噜噜免费观看| 黄网在线免费观看| 国内久久婷婷| 99爱最新免费视频在线观看| 人人摸人人干| 香蕉综合网| 婷婷的色色五月天| 一本九九色| 影音先锋 婷婷| 婷婷色综合| 国产日韩av片| 五月丁香香蕉| 99热日本精品| 一起草性爱不卡视频| 亚洲天堂婷婷丁香| 五月情四婷婷| 青青青在线视频国产| 婷婷色网站| 激情爱爱网站超大免费| 婷婷伊人视婷婷婷| 亚洲婷婷免费| 色婷综合| 日婷婷| 91综合色噜噜| 色欧洲| 六月婷婷AV| 天天碰夜夜爽| 色99欧洲色19| 激情五月婷婷网| 成片免费观看大全| 天天色天天爱天天爱天天爱y| 99色免费观看全部| 日日夜夜小色哥| 色狠狠婷婷| 天天影视色综合网| 人妻免费网站| 亚洲色优| 六月丁香天堂| se99视频| 九九99在线视频| 精品人妻久久久久久| 18久久| 无码色色色| www,超碰| 亚洲综合色婷婷| 五月婷色| 国产伦亲子伦亲子视频观看 | 综合五月婷婷| 婷婷五月丁香基地在线视频官网| 97碰在线视频| 久久婷婷五月激情网站| 精品九九久久| 神马欧美精| 色综合色五月| 五月综合久久| 夜夜操天天爽| 中文字幕网站在线观看| 六月婷婷综合| 综合激情五月综合激情五月激情1 天天爱天天做天天舔 | 夜夜爽天天爽| 国产免费一区二区在线A片视频| 99久久极情精品一区| 久久激情综合| 成人五月天。COM| 丁香五月天激情综合| 91操熟女| 欧美性色A片免费免费观看的| 婷婷五月天亚洲图片| 96色婷婷| 五月丁香免费看| 亚洲无码成人性爰网| 色青青电影色五月| 天堂久久婷婷| 五月天色官网| 欧美超碰人人| 丁香六月啪啪| 激情五月婷婷开心网| 91精品国产色猫| 激情av| 丁香五月天激情综合网| 久久免费丁香| 99网| 天天日天天爽| 五月激情婷婷开心五月| 久久一伦| 91一起操| 天天操天天曰| 五月婷婷六月丁| 国产FREESEXVIDEOS性中国| 国产色色色色| 色播五月网| 五月好婷婷| 色婷久久| 超碰99热在线观看| 99精品久久| 五月天综合久久| 五月天婷婷基地丁香| 五月激情综合婷婷| 五月综合激情网| 深爱激情丁香| 婷婷五月天少妇| 国产免费一区二区三区三州老师F1F1.CC| 人人摸人人干| 色五月色图| 五月天天丁香婷婷在线中| www.九月婷婷丁香.com| 成人日韩欧美| 亚洲无码成人| 亚洲第一精品成人999久久精品| 视频一二区| 狠狠色色色| 少妇综合网| 丁香激情网| 五月婷婷丁香av| 97人人干| 人妻久久婷婷| 91免费试看| 国产精品第一国产精品| 色色综合网站| 国产操逼视频网站| 久9热| 91热在线| 天天爽天天| 人人摸人人干人人做| 亚洲高清在线| 日韩黄色电影| 99色免费在线观看| 狠狠婷婷综合| 少妇性BBB搡BBB爽爽爽视頻| 美女五月天| 婷婷色在线播放| 五月色天情| 色婷婷香蕉丁丁网| 天天粽合合合合| 99爱爱| 色吧婷婷| 久热久操久热久草国产91| 啪啪啪大香蕉| 狠狠色五月| 激情5月婷婷| 色丁香五月婷婷在线| 天天干天天日日| 丁香五月综合激情久久潮喷| 综合网色| 久久五月视频| 91一起操| 91色久| 婷婷六月激情| 丁香五月成人丝袜| 2021日韩无码| 日本欧美999久久久三级片| 91丨九色丨国产| AⅤ网站在线看| 538在线精品| 国产精品久久久久久亚洲毛片| www.激情| 无码人妻少妇色欲AV一区二区| 秋霞成人毛片一级A片| 久久最新色| 亭亭色网| 99热播放| 婷婷五月天久久| 26uuu成人网| 99久久婷婷| 538久久| 九九视频精品这里只有| 中文字幕成人| 噜一噜免费视频| 99亚洲综合| 色五月aV| 久热这里只有精品66| 五月婷网站| 天堂草在线看www| 五月激情六月综合| 香蕉婷婷色五月| 久久9久| 天天草天天爽| 大地9中文在线观看免费高清| 成人做爰高潮A片免费视频| XX色综合| 中文字幕在线人妻| 五月综合丁香婷婷| 激情五月天在线观看婷婷| 激情综合网址| 日本a片网址| 九九九成人在线视频| 久久激情五月网| 女人天堂AV| 色五月激情五月天| 青草视频在线播放| 97操男人的天堂| 久久婷婷丁香| 99色五月| 婷婷五月天综合久久日美女| 五月丁香黄色| 婷婷九月| 亚洲国产色婷婷| 91色欲综合| 色五月天丁香婷婷| 久久AAAA片一区二区| 五月天六月丁香| 激情综合亚洲色婷婷五月| 狠狠人人婷婷| 欧美这里只有精品| 久久九九思思| 大香蕉九操| 爱草视频在线观看| 操骚货在线| 激情五月天综合| 日B日潘金莲BB| 日韩成人电影在线播放| 亚洲性爱99| 五月天六月婷婷| 色五月丁香五月| 就爱日五月天| 婷婷五月天AV| 欧美草久久五月天91| 婷婷精品在线| 欧美大肥婆大肥BBBBB| 五月婷婷性爱视频| 人人爽在线视频综合网| 日韩1区2区| 五月丁香婷婷啪啪| www综合久久| av在线超清中文| 五月丁香婷婷综合视频| 玖玖伦理电影| 99热在线免费| 99热这里只有精品8| 色婷婷久久7777| 五月天天丁香婷婷在线中| 成人免费va| 精品一区二区三区四区五区六区| 射琪琪| 欧美天天干五月丁香| 婷婷六月丁| 粉嫩AV久久一区二区三区| 色五月自偷自拍婷婷婷婷| 九九成人高清视频| 97人妻碰碰碰久久香蕉| 伊人九热| 在线五月婷婷小电影| 噜噜视频| 亚洲成人影视在线| 在线观看熟女少妇| 亚洲无码yw| 激情玖玖综合网| 天天摸,天天爽| 色色五月丁香婷婷| 五月开心啪啪| 丁香五月激情六月| 99精品综合视频| 成人Av在线大片| 国产精品热搜丁香五月婷婷| 成人综合网站| 欧美情月伍月天| 99色精品| 五月丁香六月婷婷的女人| 五月婷婷久久内射| 99精彩视频| 五月丁香色| 国产这里只有精品| 伊人超碰在线| 精品人妻久久久久久久| 99视频内射三四| 丁香五月天堂网AV| 懂色AⅤ| 国产精品18久久久| 六月丁香婷婷视频综合在线观看| 久婷婷色| 99久久.www| xxx综合在线| 99性视频| 伊人激情啪啪| www.henhenl| 婷婷五月天午夜激情影院| 婷婷六月五月天综合| 精品国产AV色一区二区深夜久久| 激情五月天啪啪视频| 午夜成人综合| 亚洲色婷婷五月天| 五月天婷婷成人| 国产探花一片区| 丁香六月亭亭久久综合| 99色综合久久| 亚洲 五月 婷婷 成人| 国产亚洲精品久久久久久久久动漫| 99re热精品视频国| 精品久久艹| 久久这里精彩免费在线观看| www.色五月| 人人搡人人| 伊人婷婷五月天| 热久69| 色五月成人| 婷婷涩涩五月天| 91丁香五月| 无码人妻激情| se99视频| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 九九XX视频| 天天日天天日天天搞| 色综合99无码 | 久久激情五月婷婷| 97中文在线| 热99这里只是精品| 一区视频网站| 另类小说五月天| 日韩成人电影AV| 插插网爽妇五月丁香| 伊人高清无码| 色婷婷五月天不卡| 丁香花操逼| 久久人人九| 亚洲成人综合在线| 99综合视频一体| 操操操操操电影网| 精品操逼一区二区| 99热天堂| 99久久9| 丁香五月天色婷婷| 丁香伊人激情| 极品五月天| 夜夜操夜夜操| 久久久WWW| 国产精品国产成人国产三级| 天天色综和网| 久99999热视频在线观看免费| 久久99成人性爱高清视频| 丁香五月WWW| 婷婷五月丁香久久| 激情色色| 婷婷99视频在线| 五月丁香六月婷婷色日| av第一二区| 婷婷丁香六月天| 99在线观看视频精品| 久久se 综合网| 人妻久久久久久久 | 成人精品一区日本无码网| 色区域网站视频| 97极品在线| 色五月在线观看| 五月婷婷和六月| 久久九九婷婷| 五月丁香成人网| 丁香婷婷十月| 午夜成人天堂久久无码日韩久久| 日本狠狠干| 精品成人a v无码内射| 99热国内精品| 久久五月婷6 9| 婷婷五月天首页| 秋霞AV淫| 免看黄大片AA | 色五月 五月婷婷| 天堂爱爱| 亚洲情欲久久| 天天插综合| 真实亲子乱子伦高清在线观看| 五月天国产成人| 日本视频欧美观看免费| 国产精品美女久久久久AV超清| 欧美色五月| 婷婷五月综合丁香久久| 色五月av| 操九色| 久久亚洲婷婷| 深爱五月激情综合| 91久久综合亚洲噜噜成人在线 | 丁香五月综合首页| 国产69久久久欧美黑人A片| 精品爆操| 色五月成人在线| 色狠狠色| 激情国产五月| 熟女激情五月天| 日在线V视频在线播放| 日本久久人人| 亚洲区1| 无码人妻精品一区二区蜜桃色欲| A1片久久久| 97韩国久久电影院| 五月婷婷另类| 99热这里只有精品4| 狠狠擼综合| 91九色精品熟女内射| 久热视频97AV在线观看| 国产人妻人伦精品一区二区| 91人人操人人爱| 婷婷五月天六点丁香五月| 色五月婷婷少妇人妻| 超碰色婷婷| 99ri视频在线观看| 4399啪啪视频| 亚洲综合五月天| 久久婷狠狠色| 婷婷深爱五月| 丁香五月六月激情| 2025中文在线视频字幕免费观看| 日本久热| 丁香玖玖视频大全| 99热九九九九| 五月激香蕉网| 青青草国产亚洲精品久久| 五月婷婷影| 天天做夜夜爽| 激情婷婷亚洲五月| 婷婷激情四射| 五月婷婷狠狠干| 久久婷婷人人| 丁香九月激情久久| 色综合9| 伊人久久大香线蕉精品| 成人无码髙潮喷水A片| 色色色com| 色婷婷视频| 久色网址| 五月综合激情视频在线| www.夜夜.com| 99色一| α久久| 人妻久久久久久久久妻久久久久| 最新色色五月天| 国产成人AV在线播放| 日韩大片艹艹| 久久婷婷五月综合色丁香| 丁香六月天婷婷| 日本wwww在线| 日逼影音先锋AV男人资源站| 91丨九色丨国产| 五月激情综合网婷婷| 丁香激情综合| 日噜噜色| 色五月婷婷影院| 激情综合在线观看| 无码激情| 男人天堂伊人五月丁香| 逼逼AV| 婷婷五月天激情基地| 色情五月综合婷婷| 久久婷婷五月综合色奶水99啪| 新97人人上人人| 97五月天| 色婷婷在线电影| 99re免费视频| ww久久| 婷婷五月天777| 成人丁香婷婷五月天| 99亚洲视频| 久久99久久99精品免视看婷| 色情五月丁香| 狠狠婷婷色| 超碰9在| 99re99在线看| 啪啪啪五月天| 五月婷婷五月天在线| 色色五月丁香婷婷| 精国产品一区二区三区A片| 91五月花丁香| 99热综合在线| 婷婷久久视频| 六月婷婷在线视频| 欧美熟女99| 亚洲亚洲人成综合网络| wwww.色婷婷| 中文字幕综合网| 婷婷综合成人五月天| 五月天婷婷综合免费| 国产成人网址| 深夜婷婷 丁香| 九月av| 五月激情另类| 久久久精品人妻| 五月天色色网站| 色综合久久8| 26uuu青青| 日日艹思思热| 日本三级大片| 精品热九九| 婷婷五月亚洲综合| 大香蕉院线| 天天操无码| 色99综合色88| 久久色婷婷| 色色免费网战视频| 色色丁香| 91主播在线| 亚洲另类电影| 99精品女人天堂| 2050人人操免费工开爱| 538在线精品| 久久精品99国产精品日本| 9久9久| 五月天婷婷丁香花| 123草逼网| 超碰99热精品在线| 99热精品在线观看| 婷婷婷婷婷开心无码播放| 婷婷五月色| 综合色网站| 天天干、天天日日| 久久婷婷五月综合| 欧美天天搞| 69婷婷丁香午夜| 中文字幕在线播放视频| 国产三级在线播放| 久久er+| 91在线日| 91久久精品视频| 亚洲激情五月婷婷日日| 99日本黄站| 五月黄色婷婷| 97久久香草精品视频| 91九色熟女| 超级碰碰碰久久网站| 99热国产这里只有| 91爱操| 久久日韩婷婷五月| 五月婷婷六月奇米网丁香| 天天草天天爽| AV在线免费播放| 天天综合网在线| 综合色七七| 狠狠五月天婷婷| 婷婷丁香五月亚洲| 天堂网啪啪| 六月丁AV| 婷婷久久色五月婷婷久久久| aaa丁香五月天| 久热黄色| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 欧美色小说婷婷| 九九热在线精品视频| 婷婷精品视频| 久久婷婷综合基地| 六月综合婷婷开心伊人| 亚洲色A| 激情久久伊人| wwW天天干| 99免费| 丁香六月婷婷综合| 国产在线黄色| 狼人婷婷综合| 色婷婷综合影院| 亚洲色综合色网| 五月播播| 五月婷婷黄网站大全| 深爱五月亚洲| 国产性爱在线| 人妻肉射免费观看| 无码激情AAAAA片-区区| 99精品视频在线免费观看| 九九成人视频| 六月丁香婷婷视频综合在线观看| 91久操| 五月丁香| 人人摸人人| 久久久思思热| 久久9视频| 噜噜色五月| 久久99综合| 九九视频这里只有精品在线播放| 久久久婷婷| 亚洲色婷婷激情| 99re热视频这里只精品| 99热99精品在线观看| 综合六月久久| 婷婷丁香五月天中文字幕| 婷婷热色| site:pnnrt.com| 99热免费观看| 色婷婷偷拍| 久久精品五月天| 97久久草草超级碰碰碰| 影音先锋四区| 色婷网| 久久只有这里精品免费| 久99热| 五月开心婷婷| 欧美久久久中文字幕| 六月激情久久| 99精品热视频| 日日夜夜天天| 国产探花AV在线| 九色激情| 日日夜夜狠狠| 亚洲色久| 久久精彩视频| 五月丁香色婷婷综合| HD久久精品视频| 狠狠爱激情网| 色频玖玖五月天| 亚洲黄网AV| 六月丁香综合| Av大香蕉| 人妻丰满精品一区二区A片| 五月综合色播播丁香婷婷| 91久久色| 综合色播| 思思精品久久艹| 婷婷六月综合基地| 五月婷av| 99性感视频| 97伊人综合婷婷| 色优久久| 五月激激网w'w'w| 久草婷婷视频| 中文激情网| 丁香九月激情| 99综合99| 成人永久免费视频在线观看| 九九色色| 久热网站| 九九99免费视频| 五月网站| 五月天丁香| 天天噜天天爱| 丁香五月成人自拍| 人人爱国产| 亚洲激情综合五月婷婷啪啪| 丁香五月天.com| 亚洲精品久久久久久久久久吃药| 99久久玖玖| 亚洲五月天色| 五月婷婷婷色| 51国精产品自偷自偷综合| 一级操逼内射在线视频| 综合色色婷婷| 超碰cap| 天天狠天天叉| 亚洲热久久| 色婷婷六月性| 色99婷婷五月天|