chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用AsyncInferQueue進一步提升AI推理程序的吞吐量

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 2023-01-06 09:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文將介紹基于OpenVINO的異步推理隊列類 AyncInferQueue,啟動多個(>2)推理請求(infer request),幫助讀者在硬件投入不變的情況下,進一步提升 AI 推理程序的吞吐量(Throughput)。

在閱讀本文前,請讀者先了解使用 start_async() 和 wait() 方法實現(xiàn)基于2個推理請求的異步推理實現(xiàn)方式。該異步推理實現(xiàn)方式相對于同步推理方式,極大提升了 AI 推理程序的吞吐量,但從任務(wù)管理器中可以看到,AI 推理硬件的利用率還有很大的提升空間。

d95eaa84-8d5d-11ed-bfe3-dac502259ad0.png

這意味著,AI 推理硬件還有潛力可挖,可以通過進一步提高推理請求個數(shù)來提升 AI 推理硬件的利用率,從而提高 AI 推理程序的吞吐量。

1.1

推理請求(InferRequest)和流(stream)

OpenVINO 運行時(Runtime)用推理請求(infer request)來抽象在指定計算設(shè)備上運行已編譯模型(Compiled_Model)。從編寫程序的角度看,推理請求是一個類,封裝了支持推理請求以同步或異步方式運行的屬性和方法。

推理請求(InferRequest)類的詳細定義參考:

https://github.com/openvinotoolkit/openvino/blob/master/src/inference/include/openvino/runtime/infer_request.hpp#L34

推理請求的個數(shù),由開發(fā)者定義;但計算設(shè)備能并行處理的推理請求個數(shù),由硬件本身的處理單元(Processing Unit)決定。超過計算硬件并行處理數(shù)量的推理請求,會被計算硬件用隊列儲存起來,當計算硬件空閑后,隊列中的推理請求將被依次取出并執(zhí)行。

OpenVINO用流(stream)來抽象計算設(shè)備能并行處理推理請求的能力,通過屬性:“NUM_STREAMS”,可以獲取延遲優(yōu)先或吞吐量優(yōu)先模式下的計算硬件支持的最優(yōu)streams數(shù)量,如下表所示。

d98c3af8-8d5d-11ed-bfe3-dac502259ad0.png

:上述數(shù)據(jù)在蝰蛇峽谷上測得,CPU=i7-12700H, 集成顯卡=Iris Xe, 獨立顯卡=A770m

: GPU設(shè)備沒有INFERENCE_NUM_THREADS屬性

上述數(shù)據(jù)測試的源代碼如下,歡迎各位讀者在自己的硬件平臺上測試:

from openvino.runtime import Core, get_version
core = Core()
print(get_version())
print(core.available_devices)
device = device = ['GPU.0', 'GPU.1', 'CPU', 'AUTO', 'AUTO:GPU,-CPU'][0]
cfgs = {}
cfgs['PERFORMANCE_HINT'] = ['THROUGHPUT', 'LATENCY', 'CUMULATIVE_THROUGHPUT'][0]
net = core.compile_model("model.onnx",device,cfgs)
# Get Supported properties
supported_properties = net.get_property('SUPPORTED_PROPERTIES')
print(f'Support properties for {device}:', supported_properties)
opt_nireq = net.get_property('OPTIMAL_NUMBER_OF_INFER_REQUESTS')
print(f'OPTIMAL_NUMBER_OF_INFER_REQUESTS for {device}:', opt_nireq)
nstreams = net.get_property('NUM_STREAMS')
print(f'nstreams for {device}:', nstreams)
performance_hint_num_requests = net.get_property('PERFORMANCE_HINT_NUM_REQUESTS')
print(f'performance_hint_num_requests for {device}:', performance_hint_num_requests)
if device == "CPU":
  # INFERENCE_NUM_THREADS
  inference_num_threads = net.get_property('INFERENCE_NUM_THREADS')
  print(f'inference_num_threads for {device}:', inference_num_threads)
else:
  gpu_queue_priority = net.get_property('GPU_QUEUE_PRIORITY')
print(f'GPU queue priority for {device}:', gpu_queue_priority)

向右滑動查看完整代碼

1.1.1

CPU 的流與推理請求

對于 CPU 來說,一個流(stream)只能服務(wù)一個推理請求。通過屬性ov::range_for_streams,可以查到 CPU 支持的流數(shù)量的范圍;流的數(shù)量無需開發(fā)者使用代碼顯示設(shè)置,OpenVINO 運行時會根據(jù)延遲優(yōu)先或吞吐量優(yōu)先來自動設(shè)置。

d9ada4a4-8d5d-11ed-bfe3-dac502259ad0.png

1.1.2

GPU 的流與推理請求

對于 GPU 來說,一個流(stream)可以同時服務(wù)兩個推理請求。通過屬性 ov::range_for_streams,可以查到 GPU 支持的流數(shù)量的范圍:[1, 2];流的數(shù)量無需開發(fā)者使用代碼顯示設(shè)置,OpenVINO 運行時會根據(jù)延遲優(yōu)先或吞吐量優(yōu)先來自動設(shè)置。

d9c8a84e-8d5d-11ed-bfe3-dac502259ad0.png

參考代碼:

https://www.jianshu.com/p/1748444e6a50

1.2

AsyncInferQueue類

OpenVINO運行時(Runtime)提供 AsyncInferQueue 類來抽象并管理異步推理請求池,其常用方法和屬性有:

__init__(self, compiled_model, jobs = 0):創(chuàng)建AsyncInferQueue對象

set_callback(func_name):為推理請求池中所有的推理請求設(shè)置統(tǒng)一的回調(diào)函數(shù)

start_async(inputs, userdata = None):異步啟動推理請求

wait_all():等待所有的推理請求執(zhí)行完畢

1.2.1

基于AsyncInferQueue類的

異步推理范例程序

基于 AsyncInferQueue 類 YOLOv5 模型的異步推理范例程序的核心代碼部分如下所示:

完整范例代碼請下載:yolov5_async_infer_queue.py

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5_async_infer_queue.py

運行代碼前,請參考運行環(huán)境搭建流程。

...
def preprocess(frame):
  # Preprocess the frame
  letterbox_im, _, _= letterbox(frame, auto=False) # preprocess frame by letterbox
  im = letterbox_im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB
  im = np.float32(im) / 255.0  # 0 - 255 to 0.0 - 1.0
  blob = im[None] # expand for batch dim
  return blob, letterbox_im.shape[:-1], frame.shape[:-1]
def postprocess(ireq: InferRequest, user_data: tuple):
  result = ireq.results[ireq.model_outputs[0]]
  dets = non_max_suppression(torch.tensor(result))[0].numpy()
  bboxes, scores, class_ids= dets[:,:4], dets[:,4], dets[:,5]
  # rescale the coordinates
  bboxes = scale_coords(user_data[1], bboxes, user_data[2]).astype(int)
  print(user_data[0],"	"+f"{ireq.latency:.3f}"+"	", class_ids)
  return 
# Step1:Initialize OpenVINO Runtime Core
core = Core()
# Step2: Build compiled model
device = device = ['GPU.0', 'GPU.1', 'CPU', 'AUTO', 'AUTO:GPU,-CPU'][0]
cfgs = {}
cfgs['PERFORMANCE_HINT'] = ['THROUGHPUT', 'LATENCY', 'CUMULATIVE_THROUGHPUT'][0]
net = core.compile_model("yolov5s.xml",device,cfgs)
output_node = net.outputs[0]
b,n,input_h,input_w = net.inputs[0].shape
# Step3: Initialize InferQueue
ireqs = AsyncInferQueue(net)
print('Number of infer requests in InferQueue:', len(ireqs))
# Step3.1: Set unified callback on all InferRequests from queue's pool
ireqs.set_callback(postprocess)
# Step4: Read the images
image_folder = "./data/images/"
image_files= os.listdir(image_folder)
print(image_files)
frames = []
for image_file in image_files:
  frame = cv2.imread(os.path.join(image_folder, image_file))
  frames.append(frame)
# 4.1 Warm up
for id, _ in enumerate(ireqs):
  # Preprocess the frame
  start = perf_counter()
  blob, letterbox_shape, frame_shape = preprocess(frames[id % 4])
  end = perf_counter()
  print(f"Preprocess {id}: {(end-start):.4f}.")
  # Run asynchronous inference using the next available InferRequest from the pool
  ireqs.start_async({0:blob},(id, letterbox_shape, frame_shape))
ireqs.wait_all()
# Step5: Benchmark the Async Infer
start = perf_counter()
in_fly = set()
latencies = []
niter = 16
for i in range(niter):
  # Preprocess the frame
  blob, letterbox_shape, frame_shape = preprocess(frames[i % 4]) 
  idle_id = ireqs.get_idle_request_id()
  if idle_id in in_fly:
    latencies.append(ireqs[idle_id].latency)
  else:
    in_fly.add(idle_id)
  # Run asynchronous inference using the next available InferRequest from the pool 
  ireqs.start_async({0:blob},(i, letterbox_shape, frame_shape) )
ireqs.wait_all()

向右滑動查看完整代碼

運行結(jié)果如下所示,與基于單個推理請求的start_async()+wait()實現(xiàn)方式相比,基于 AsyncInferQueue 類的 YOLOv5 模型的異步推理程序的吞吐量明顯得到提升。

d9de4492-8d5d-11ed-bfe3-dac502259ad0.png

1.3

結(jié)論

使用 OpenVINO Runtime 的 AsyncInferQueue 類,可以極大提升 AI 推理程序的吞出量。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39058

    瀏覽量

    299615
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3838

    瀏覽量

    85063
  • 任務(wù)管理器
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    7929

原文標題:使用AsyncInferQueue進一步提升AI推理程序的吞吐量 | 開發(fā)者實戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    用“分區(qū)”來面對超大數(shù)據(jù)集和超大吞吐量

    分區(qū)(partitions) 也被稱為 分片(sharding),通常采用對數(shù)據(jù)進行分區(qū)的方式來增加系統(tǒng)的 可伸縮性,以此來面對非常大的數(shù)據(jù)集或非常高的吞吐量,避免出現(xiàn)熱點。
    的頭像 發(fā)表于 12-30 16:40 ?126次閱讀
    用“分區(qū)”來面對超大數(shù)據(jù)集和超大<b class='flag-5'>吞吐量</b>

    天合儲能與Lightshift Energy進一步擴大戰(zhàn)略合作

    近日,天合儲能宣布將與美國領(lǐng)先的儲能開發(fā)、建設(shè)及運營方 Lightshift Energy(以下簡稱 “Lightshift”) 進一步擴大戰(zhàn)略合作。在既有合作基礎(chǔ)上,雙方歷史累計及在建、將建項目合計,保障聯(lián)合交付儲能項目規(guī)模超過 1GWh,持續(xù)支持美國多個州的電網(wǎng)建設(shè)與穩(wěn)定運行。
    的頭像 發(fā)表于 12-22 15:14 ?306次閱讀

    BlackBerry QNX與芯馳科技進一步深化戰(zhàn)略合作

    BlackBerry有限公司(紐約證券交易所代碼:BB;多倫多證券交易所代碼:BB)旗下業(yè)務(wù)部門QNX與中國創(chuàng)新汽車半導(dǎo)體供應(yīng)商芯馳科技今日宣布,雙方將進一步深化合作,基于芯馳科技最新代X10
    的頭像 發(fā)表于 12-04 16:42 ?1695次閱讀

    BlackBerry QNX與眾森軟件進一步深化戰(zhàn)略合作

    今日,深圳市眾森軟件有限公司(以下簡稱"眾森軟件")正式宣布與全球領(lǐng)先的實時操作系統(tǒng)與嵌入式軟件供應(yīng)商 QNX(BlackBerry有限公司旗下部門QNX)進一步深化戰(zhàn)略合作。此次合作將進一步推動下代智能網(wǎng)聯(lián)汽車與智慧出行解決
    的頭像 發(fā)表于 12-04 16:40 ?1833次閱讀

    上汽奧迪與創(chuàng)維汽車智能合作進一步深化升級

    近日,創(chuàng)維汽車智能迎來重要突破:上汽奧迪客戶將當前公司開發(fā)的顯示屏項目沿用至上汽奧迪其他主力車型。這決定不僅體現(xiàn)了客戶對創(chuàng)維汽車智能技術(shù)實力與服務(wù)品質(zhì)的高度認可,更標志著雙方合作進一步深化升級。
    的頭像 發(fā)表于 11-25 10:32 ?623次閱讀

    使用羅德與施瓦茨CMX500的吞吐量應(yīng)用層測試方案

    5G NR(New Radio)吞吐量應(yīng)用層測試是評估5G網(wǎng)絡(luò)性能的個重要方面,它主要關(guān)注的是在實際應(yīng)用條件下,用戶能夠體驗到的數(shù)據(jù)傳輸速率。這種測試通常包括了對下行鏈路和上行鏈路的吞吐量進行測量,以確保網(wǎng)絡(luò)可以滿足各種應(yīng)用場
    的頭像 發(fā)表于 09-02 13:56 ?7809次閱讀
    使用羅德與施瓦茨CMX500的<b class='flag-5'>吞吐量</b>應(yīng)用層測試方案

    蔚來進一步拓展其全球業(yè)務(wù)

    8月18日,蔚來公司宣布將于2025年至2026年期間陸續(xù)進入新加坡、烏茲別克斯坦和哥斯達黎加三個市場,進一步拓展其全球業(yè)務(wù),為當?shù)赜脩魩韯?chuàng)新、可持續(xù)、高品質(zhì)的智能電動出行體驗。
    的頭像 發(fā)表于 08-20 17:00 ?1242次閱讀

    信而泰×DeepSeek:AI推理引擎驅(qū)動網(wǎng)絡(luò)智能診斷邁向 “自愈”時代

    故障)”的自動化推理鏈條。3.預(yù)測性防御:智能基線洞察,防患于未然l 基于先進的時序分解算法,為每個關(guān)鍵業(yè)務(wù)終端/鏈路動態(tài)構(gòu)建多維性能基線(吞吐量、時延、丟包率)。l 主動預(yù)警潛在風(fēng)險,如帶寬瓶頸
    發(fā)表于 07-16 15:29

    軟通動力與中國聯(lián)通合作關(guān)系進一步深化

    近日,軟通動力成功中標聯(lián)通(廣東)產(chǎn)業(yè)互聯(lián)網(wǎng)有限公司2025年軟件技術(shù)開發(fā)集中采購項目,中標份額位列榜首。這突破性成果,不僅彰顯了軟通動力在數(shù)字技術(shù)服務(wù)領(lǐng)域的綜合實力,也標志著其與中國聯(lián)通合作關(guān)系的進一步深化。
    的頭像 發(fā)表于 07-01 09:18 ?1073次閱讀

    晶圓級封裝:連接密度提升的關(guān)鍵一步

    了解晶圓級封裝如何進一步提高芯片的連接密度,為后續(xù)技術(shù)發(fā)展奠定基礎(chǔ)。
    的頭像 發(fā)表于 06-27 16:51 ?659次閱讀

    CY7C65211 作為 SPI 從機模式工作時每秒的最大吞吐量是多少?

    CY7C65211 作為 SPI 從機模式工作時每秒的最大吞吐量是多少? 有實際的測試數(shù)據(jù)嗎?
    發(fā)表于 05-27 07:38

    如何在Visual Studio 2022中運行FX3吞吐量基準測試工具?

    我正在嘗試運行 John Hyde 的書“SuperSpeed by Design”中的 FX3 吞吐量基準測試工具。 但是,我面臨些困難,希望得到任何指導(dǎo)。 具體來說,我正在使用 Visual
    發(fā)表于 05-13 08:05

    FX3進行讀或?qū)懖僮鲿rCS信號拉低,在讀或?qū)懲瓿珊驝S置高,對吞吐量有沒有影響?

    從盡可能提高吞吐量的角度看,在進行讀或?qū)懖僮鲿rCS信號拉低,在讀或?qū)懲瓿珊驝S置高,對吞吐量有沒有影響,還是應(yīng)該CS直拉低比較好。
    發(fā)表于 05-08 07:13

    三星攜Galaxy AI和以軟件為中心的網(wǎng)絡(luò)技術(shù)亮相MWC 2025,進一步強化移動AI領(lǐng)先優(yōu)勢

    3月3日-6日,世界移動通信大會(MWC2025)在巴塞羅那 Fira Gran Via展館舉行。本次大會上,三星電子進一步創(chuàng)新移動AI體驗,三星移動業(yè)務(wù)和網(wǎng)絡(luò)業(yè)務(wù)部門在現(xiàn)場展示了旗下包括下
    的頭像 發(fā)表于 03-05 15:43 ?687次閱讀
    三星攜Galaxy <b class='flag-5'>AI</b>和以軟件為中心的網(wǎng)絡(luò)技術(shù)亮相MWC 2025,<b class='flag-5'>進一步</b>強化移動<b class='flag-5'>AI</b>領(lǐng)先優(yōu)勢

    迅為2K0300開發(fā)板進一步刨析,打造HMI體機產(chǎn)品的靈活優(yōu)勢

    迅為2K0300開發(fā)板進一步刨析,打造HMI體機產(chǎn)品的靈活優(yōu)勢
    的頭像 發(fā)表于 02-26 13:58 ?1132次閱讀
    迅為2K0300開發(fā)板<b class='flag-5'>進一步</b>刨析,打造HMI<b class='flag-5'>一</b>體機產(chǎn)品的靈活優(yōu)勢