久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 三種 Badcase 精度驗證方案詳解與 hbm_infer 部署實錄

三種 Badcase 精度驗證方案詳解與 hbm_infer 部署實錄

發布人:地平線開發者 時間:2025-10-24 來源:工程師 發布文章

在模型結構優化與部署量化過程中,開發者往往會遇到一個關鍵任務:基于歷史 Badcase 數據驗證模型精度變化,確保模型修改不會引入明顯性能退化。 這類驗證常見于感知、預測、行為識別等任務,尤其在客戶交付或精度回歸過程中十分關鍵。

但實際場景中,Badcase 的來源和管理非常復雜:

  • 數據常常分散在客戶服務器;

  • 有些數據是動態生成、無法導出

  • 板端資源有限,難以長期駐留模型或數據。

為此,地平線工具鏈圍繞量化后的模型,提供了三種可選的精度驗證方案,分別適配不同類型的項目需求。

一、三種 Badcase 精度驗證方案
1.1 方案一:仿真推理(Simulate Inference)

使用量化過程生成的與 hbm 等效的 .bc 模型,在服務端模擬 BPU 行為進行推理,無需依賴硬件設備。

  • 優點

    • 無需開發板,部署輕量;

    • 適合多模型結構快速迭代驗證;

  • 缺點

    • 本地仿真推理因為缺少了專用板端硬件參與,速度相對較差。

適用場景:早期算法開發、模型結構調整的初步驗證。

1.2 方案二:本地數據,遠程推理(hbm_infer 協同執行)

基于 hbm_infer 模塊,服務端將輸入數據通過 RPC 接口發送至板端,調用 HBM 模型進行真實硬件推理,結果再返回服務端進行分析。

  • 優點

    • 數據留在服務端,可動態調度;

    • 使用板端 硬件推理,速度較快,且度評估基于真實 BPU,結果可靠;

  • 缺點

    • 網絡帶寬影響推理效率;

    • 需依賴板端資源;

適用場景:Badcase 動態生成、服務端數據不便遷移、對驗證速度存在較大需求 、真實精度驗證。

1.3 方案三:板端本地驗證(純離線推理)

通過 NFS 或本地掛載方式將全部數據傳輸到板端,在板端離線完成所有推理與驗證工作。

  • 優點

    • 推理速度最快,完全無網絡瓶頸;

    • 精度結果與部署完全一致;

  • 缺點

    • 需預先準備所有測試數據;

    • 動態輸入或在線調試能力較弱

    • 重度需依賴板端資源;

適用場景:靜態 Badcase 精度評估、大規模離線驗證、交付測試。

二、三方案對比一覽

image.png

三、為什么重點介紹方案二?

盡管三種方案各有應用空間, 在目前發布的 OE 包與官方示例中,對方案一/三已有說明與案例,而方案二雖然支持面廣、功能強大,卻缺少系統化教程,另外方案二 hbm_infer 是目前唯一能同時滿足以下需求的解決方案

  1. 數據無需遷移:Badcase 可在服務器本地組織;

  2. 推理結果真實可信:完全基于硬件板端執行;

  3. 部署過程存在一定復雜度:但可高度自動化,適合通用集成;

本文將聚焦方案二的 hbm_infer 使用流程,提供完整、可運行的代碼模板,幫助你快速構建服務端 + 板端協同驗證框架。

四、 hbm_infer 使用指南(方案二)
4.1 安裝依賴
# 安裝核心組件
1. hbm_infer的使用依賴算法工具發布的docker環境,因此在使用hbm_infer前需要先構建后DOCKER環境,然后在容器中安裝hbm_infer組件
2. 在NDA支持下獲取hbm_infer python安裝包,進入docker環境后使用pip install 安裝后使用
4.2 常規模式示例:開發調試推薦
import torch
import time
from hbm_infer.hbm_rpc_session import HbmRpcSession

def test_hbm_infer():
    hbm_model = HbmRpcSession(
        host="192.168.1.100",  # 板端 IP
        local_hbm_path="./model.hbm"
    )
    hbm_model.show_input_output_info()

    data = {
        "input_0_y": torch.randint(0, 256, (1, 512, 960, 1), dtype=torch.uint8),
        "input_0_uv": torch.randint(0, 256, (1, 256, 480, 2), dtype=torch.uint8),
    }

    begin = time.time()
    for _ in range(10):
        outputs = hbm_model(data)
        print({k: v.shape for k, v in outputs.items()})

    print(f"Avg time: {round((time.time()-begin)*1000 / 10, 2)} ms")
    hbm_model.close_server()

if __name__ == "__main__":
    test_hbm_infer()
4.3 Flexible 模式示例:多線程/多模型推薦
from hbm_infer.hbm_rpc_session_flexible import (
    HbmRpcSession, init_server, deinit_server, init_hbm, deinit_hbm
)
import torch, time

def test_flexible():
    server = init_server(host="192.168.1.100")
    handle = init_hbm(hbm_rpc_server=server, local_hbm_path="./model.hbm")

    hbm_model = HbmRpcSession(hbm_rpc_server=server, hbm_handle=handle)

    data = {
        "input_0_y": torch.randint(0, 256, (1, 512, 960, 1), dtype=torch.uint8),
        "input_0_uv": torch.randint(0, 256, (1, 256, 480, 2), dtype=torch.uint8),
    }

    begin = time.time()
    for _ in range(10):
        outputs = hbm_model(data)
        print({k: v.shape for k, v in outputs.items()})

    print(f"Avg time: {round((time.time()-begin)*1000 / 10, 2)} ms")

    hbm_model.close_server()
    deinit_hbm(handle)
    deinit_server(server)

if __name__ == "__main__":
    test_flexible()
五、小貼士:提高推理效率的建議
  • 板端與服務端建議處于同網段或直連,降低傳輸延遲;

  • 對于批量推理任務,可提前批量加載數據并串行發送;

  • 支持 with_profile=True 打開性能日志分析;

六、總結建議

image.png


*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



相關推薦

技術專區

關閉