AIパーソナル・ラーニング
と実践的なガイダンス

DashInfer-VLM, マルチモーダルSOTA推論性能, ultra-vLLM!

紹介

DashInfer-VLMは、視覚的なマルチモーダル大規模モデルVLMのための推論アーキテクチャであり、特にQwen VLモデルの推論高速化のために最適化されている。 DashInfer-VLMと他のVLM用推論高速化フレームワークとの最大の違いは、VIT部分とLLM部分を分離し、VITとLLMが互いに干渉することなく並列に実行されることである。互いに干渉することなく。

これは、VITの特徴抽出部分だけでなく、VLMにおける画像や映像の前処理がLLMの生成を妨げないことが特徴であり、VIT/LLM分離型アーキテクチャとすることも可能で、オープンソースコミュニティで初めてこのアーキテクチャを採用したVLMサービスフレームワークである。


マルチカード展開では、各カードにViTプロセッシングユニットを搭載しており、ビデオやマルチイメージシナリオで非常に大きなパフォーマンスアドバンテージを発揮する。

また、ViTの部分はメモリキャッシュに対応しており、複数回の対話でViTを何度も再計算する必要がない。

以下は、そのアーキテクチャー図と、4カード・パート72Bによる構成図である。

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

 

アーキテクチャ図は、プロセスとアーキテクチャを説明している:

  • ViTパートでは、推論にTensorRTやonnxruntime(onnxモデルエクスポートは、フレームワーク内のモデルのViTパートで実行される)のような多くの推論エリシテーションを使用することができます、TensorRTは現在、デフォルトでフレームワークでサポートされています。
  • LLMセクションでは、DashInferが推論に使われる。
  • キャッシュ部、サポートViT結果メモリキャッシュ、LLM部プリフィックスキャッシュ、LLM部マルチモーダルプリフィックスキャッシュ(デフォルトでは有効になっていない)

 

コード・アドレス

https://github.com/modelscope/dash-infer

書類の住所 

https://dashinfer.readthedocs.io/en/latest/vlm/vlm_offline_inference_en.html

 

ベストプラクティス

Magic Hitchコミュニティの無料GPU演算でDashInferを体験してください:

まずはdashinfer-vlmとTensorRTのインストールだ。

# 最初に必要なパッケージをインストールする
インポートos

# dashinferのバージョン2.0.0rc2をダウンロードしてインストールします。
# 必要であれば、wgetを使用してTensorRTパッケージをダウンロードして展開します。
# pip install dashinfer 2.0.0rc2
#!pip install https://github.com/modelscope/dash-infer/releases/download/v2.0.0-rc2/dashinfer-2.0.0rc2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
#!wget https://modelscope.oss-cn-beijing.aliyuncs.com/releases/TensorRT-10.6.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz
#!tar -xvzf TensorRT-10.6.0.26.Linux.x86_64-gnu.cuda-12.6.tar.gz

# ローカルにダウンロードし、modelscopeに対応するURLに置き換えます。
# dashinferをインストールします。パッケージが大きいので、ローカルにインストールすることをお勧めします。
#!wget https://modelscope.oss-cn-beijing.aliyuncs.com/releases/dashinfer-2.0.0rc3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
#!pip install ./dashinfer-2.0.0rc3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

# install dashinfer vlm
#!pip install dashinfer-vlm

#!pip install OpenAI client
#!pip install openai==1.56.2

# TensorRTのPythonパッケージをダウンロードから開いてインストールします。
#!pip install TensorRT-10.6.0.26/python/tensorrt-10.6.0-cp310-none-linux_x86_64.whl

 

TensorRTは環境変数の設定を必要とする:

インポート os

# TensorRTランタイムライブラリへのパスを取得する。
trt_runtime_path = os.getcwd() + "/TensorRT-10.6.0.26/lib/"

# 現在のLD_LIBRARY_PATH環境変数の値を取得します。
current_ld_library_path = os.environ.get('LD_LIBRARY_PATH', '')

# 既存の値に新しいパスを追加する
if current_ld_library_path.
# if LD

環境がインストールされたら、dashinfer vlmを起動してモデルを推論し、openai互換のサーバーを形成する。

 

デフォルトでは、環境内のすべてのGPUメモリが使用されます。

dashinfer_vlm_serve --model qwen/Qwen2-VL-2B-Instruct --port 8000 --host 127.0.0.1

このプロセスは、DashInferと、ViTが使用する外部エンジン(この場合はTensorRT)を初期化し、openaiサービスを開始する。

 

これらのログは、TRTが正常に初期化されたことを示している:

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

 

これらのログを見る限り、DashInferは正常に初期化されたようだ:

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

 

これらのログを見ると、openaiサービスが正常に初期化されたことがわかる:

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

 

ここですべての初期化が成功すると、クライアントとベンチマーク用に別のノートブックを開くことができる。

手帳のアドレスhttps://modelscope.cn/notebook/share/ipynb/6ea987c5/vl-start-server.ipynb

 

画像理解のデモ

複数の画像を使った画像理解のデモを行う:

# 必要なOpenAIクライアントのバージョンをインストールします。
pip install openai==1.56.2 # VLをサポートするには、最新のOpenAIクライアントが必要です。

from openai import OpenAI

# OpenAIクライアントを初期化します。
client = OpenAI(
base_url="http://localhost:8000/v1", api_key="EMPTY", api_key="EMPTY
api_key="EMPTY"
)

# チャット完了のAPIコールを準備する
response = client.chat.completions.create(
model="model"、
messages=[
{
"role": "user", "content": [
「コンテンツ": [
{ "type": "text", "text": "Are these images different?" }, { "role": "user", "content": [
{
"type": "image_url", "image_url": { "type": "content", "text": "Are these images different?"}, { "type": "image_url", "text": "Are these images different?
"image_url": {
"url": "https://farm4.staticflickr.com/3075/3168662394_7d7103de7d_z_d.jpg", { "type": "image_url", "image_url": {
}
},
{
「タイプ": "image_url", {
"image_url": {
"url": "https://farm2.staticflickr.com/1533/26541536141_41abe98db3_z_d.jpg",
}
}
]
}
],
stream=True, max_completion_tokens=1024, } ], stream=True, max_completion_tokens=1024, } ].
max_completion_tokens=1024, }, ], stream=True, max_completion_tokens=1024, }.
temperature=0.1, )
)

# ストリームされた応答を処理する
full_response = ""
for chunk in response.
# デルタ・コンテンツをフル・レスポンスに追加する
full_response += chunk.choices[0].delta.content
print(".", end="")end="") # 受信した各チャンクにドットを印刷する

# 完全な応答を表示する
print(f"ⅳ画像: フルレスポンス:ⅳ{full_response}")

 

ビデオ理解デモ

openaiは標準的なビデオインターフェースを定義していないため、本稿では自動的にビデオをダウンロードし、フレームを抽出し、分析するvideo_url型を提供する。

#ビデオ例
pip install openai==1.56.2 # OpenAIクライアントがビデオリンク機能をサポートしていることを確認します。

from openai import OpenAI

# OpenAIクライアントを初期化します。
client = OpenAI(
base_url="http://localhost:8000/v1", api_key="EMPTY", api_key="EMPTY
api_key="EMPTY"
)

# 動画URLでチャット完了リクエストを作成する
response = client.chat.completions.create(
model="model"、
messages=[
{
"role": "user", "content": [
「コンテンツ": [
{
"type": "text", "text": "動画と一緒にアップロードできる魅力的な説明文を作成してください。
"text": "動画と一緒にアップロードできる魅力的な説明文を作成します。"
},
" }, {
"type": "video_url", "text": "動画と一緒にアップロードできる魅力的な説明を生成します。
"video_url": {
"url": "https://cloud.video.taobao.com/vod/JCM2awgFE2C2vsACpDESXZ3h5_iQ5yCZCypmjtEs2Ck.mp4"、
"fps": 2
}
}
]
}
],
max_completion_tokens=1024、
max_completion_tokens=1024, top_p=0.5,
top_p=0.5, temperature=0.1、
frequency_penalty=1.05、
stream=True, )
)

# ストリーミング応答を処理する
full_response = ""
for chunk in response.
# チャンクのデルタコンテンツをフルレスポンスに追加する
full_response += chunk.choices[0].delta.content
print(".".end="") # 進捗をドットで示す

# 完全なレスポンスを表示する
print(f "フルレスポンス:full_response")

 

ベンチマーク

上の例題を理解し、単純にスループットテスト用のマルチコンカレントテストを行うには、上の画像を使用してください。

# benchmark!pip install openai==1.56.2
インポート時間
import concurrent.futures
from openai import OpenAI

#はOpenAIのクライアントを初期化します。
client = OpenAI(
base_url="http://localhost:8000/v1", api_key="EMPTY", api_key="EMPTY
api_key="EMPTY"
)

#リクエストパラメータ
model = "モデル"
メッセージ = [
{
"役割": "ユーザー", "内容": [ ]。
「コンテンツ": [
{ "type": "text", "text": "Are these images different?"}, { "role": "user", "content": [ "type": "text", "text": "Are these images different?
{
"type": "image_url", "image_url": { "type": "content", "text": "Are these images different?" }, { "type": "image_url", "text": "Are these images different?
"image_url": {
"url": "https://farm4.staticflickr.com/3075/3168662394_7d7103de7d_z_d.jpg", { "type": "image_url", "image_url": {
}
},
{
「タイプ": "image_url", {
"image_url": {
"url": "https://farm2.staticflickr.com/1533/26541536141_41abe98db3_z_d.jpg",
}
}
]
}
]

# 同時リクエスト関数
def send_request():
開始時間 = time.time()
response = client.chat.completions.create(
model=model、
messages=messages、
stream=False, max_completion_tokens
max_completion_tokens=1024、
temperature=0.1, )
)
end_time = time.time()
レイテンシー = end_time - start_time
リターンレイテンシー

#ベンチマーク関数
def benchmark(num_requests, num_workers):
レイテンシ = [].
開始時間 = time.time()

with concurrent.futures.ThreadPoolExecutor(max_workers=num_workers) as executor:
futures = [executor.submit(send_request) for _ in range(num_requests)]。
for future in concurrent.futures.as_completed(futures): [executor.submit(send_request) for _ in range(num_requests)].
latencies.append(future.result())

end_time = time.time()
total_time = end_time - start_time
qps = num_requests / total_time
平均レイテンシー = sum(latencies) / len(latencies)
スループット = num_requests * 1024 / total_time # 1リクエストあたりのレスポンスサイズを1024バイトとする。

print(f "合計時間: {total_time:.2f}秒")
print(f "QPS: {qps:.2f}")
print(f "平均待ち時間: {average_latency:.2f}秒")

#メインプログラムエントリ
if __name__ == "__main__": num_requests = 100
num_requests = 100 # リクエスト総数。
num_workers = 10 # 同時ワーカースレッド数
ベンチマーク(num_requests, num_workers)

 

テスト結果

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

手帳のアドレスhttps://modelscope.cn/notebook/share/ipynb/5560603a/vl-test-and-benchmark.ipynb

 

総合とvLLMの性能比較:

vLLMの性能をより包括的かつ正確に比較対照するために、OpenGVLab/InternVL-Chat-V1-2-SFT-Dataを使用して、異なるサイズのモデルで単一同時会話、複数同時会話、複数ラウンド会話のベンチマークを行った。詳細な再現スクリプトはリンク先に記載されており、結果は以下の通りである:

DashInferは、特に多ラウンド対話において、すべてのケースで性能上の優位性があることがわかる。

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

DashInfer-VLM、vLLMを超えるマルチモーダルSOTA推論性能!

無断転載を禁じます:チーフAIシェアリングサークル " DashInfer-VLM, マルチモーダルSOTA推論性能, ultra-vLLM!

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語