サイト内検索

Qualcommのエッジデバイスに大規模言語モデル(LLM)を実装する

近年の生成AIブームを背景に、「エッジデバイス上で大規模言語モデル(LLM)を動かしたい」というご要望が急増しています。

本記事では、Qualcomm製組込み向けSoC「QCS8550」にMeta社のLlama 3.1-8Bモデルを実装し、エッジデバイス上で動作するテキスト推論アプリを実行する手順を解説します。

 

QualcommAI HubというAI開発者向けプラットフォームをリリースしており、例えばLlamaのような有名な大規模言語モデルをQualcomm SoC上で実行可能なモデルに最適化する仕組みが実装されています。Qualcommが動作検証済みのモデルを使用することができるため、スクラッチで行うよりも実装のハードルを下げることができます。


今回は
Qualcomm QCS8550 SoCLlama3.1-8Bモデルを実装し、テキスト推論アプリを動かしてみます。

Qualcomm AI Hubについて詳しく知りたい方はこちら

実装の流れ

1. Llamaの重みファイルを使用するためHugging Faceでモデル利用に関する権限をリクエストする

2. Qualcomm AI Hub Modelsを使ってLmama3.1-8Bモデル(Context Binary)をエクスポートする

3. Qualcomm Genie SDK(生成AI向けSDK)LLM推論アプリを使用するにあたって必要なライブラリーなどを準備する

4. Qualcommのエッジデバイス(QCS8550)LLM推論アプリを実行する

使用機材

Ubuntu PC(SL2環境もご使用いただけます)

RB5 Gen2開発キット(QCS8550搭載)

実装手順

Llama3.1-8Bモデル利用の事前準備

Llama3.1-8Bモデルの利用権限リクエスト

今回はHugging faceLlamaモデルをベースに、AI Hubを使ってオンデバイス推論用に最適化していきます。

Llamaモデルファミリーを利用するには、事前にHugging FaceWebサイトで利用権限のリクエストが必要です。

初めてリクエストされる方は、こちらのページからお願いいたします。

Hugging Faceアクセストークンの発行

利用権限の承認後にCLIからモデルにアクセスする際、Hugging Faceのアクセストークンを設定する必要があります。

アクセストークンはこちらのページで事前に作成し控えておきます。

ホストPC環境構築

Qualcomm QAIRT SDKのダウンロード (v2.29以降推奨)

SDKQualcomm Package Managerでダウンロードできます。ホストPCUbuntu環境にSDKパッケージを配置してください。

本ページのデモではv2.33.0.250327を使用しています。

(補足)

Qualcomm Package Managerの使い方はこちらのページをご参照ください (メーカーのページへリンクしています)

仮想環境(venv)を作る

test@SDTEST:~$ python3 -m venv llama3_1_8B
test@SDTEST:~$ source llama3_1_8B/bin/activate
(llama3_1_8B) test@SDTEST:~$

QAIRT SDK環境の設定を行う

(llama3_1_8B) test@SDTEST:~$ source ~/qairtsdk/qairt/2.33.0.250327/bin/envsetup.sh
[INFO] AISW SDK environment set
[INFO] QNN_SDK_ROOT: /home/test/qairtsdk/qairt/2.33.0.250327
[INFO] SNPE_ROOT: /home/test/qairtsdk/qairt/2.33.0.250327

Llama3.1-8Bモデルを扱う際に必要なパッケージをインストールする

下記コマンドを実行することで必要なパッケージをまとめてインストールできます。

(llama3_1_8B) test@SDTEST:~$ pip install "qai-hub-models[llama-v3-1-8b-instruct]" torch==2.4.1 torchvision==0.19.1 aimet-onnx==2.6.0

Gitがインストールされていることの確認

(llama3_1_8B) test@SDTEST:~$ git --version
git version 2.34.1

メモリー容量の確認

メモリー(RAM Mem+Swap)は最低80GB確保しておく必要があります。確保できていないとモデルエクスポートの途中でエラーが発生します。

(llama3_1_8B) test@SDTEST:~$ free -h
                    total        used        free      shared  buff/cache   available
Mem:            27Gi       528Mi        16Gi       1.0Mi        10Gi        26Gi
Swap:           60Gi        74Mi        59Gi

Hugging Face Hubのインストール

(llama3_1_8B) test@SDTEST:~$ pip install -U "huggingface_hub[cli]"

Hugging Face CLIにログイン

(llama3_1_8B) test@SDTEST:~$ huggingface-cli login
# Enter your token (input will not be visible): という表示が出るのでここに先ほど作成したアクセストークンを入力(ペースト可)します

ログインが成功すると下図のような出力になります。

Llama3.1-8Bモデルのエクスポート

AI Hub Modelsのエクスポート用コマンドを実行

このコマンドで下記のステップが自動的に実行されます。

Hugging FaceからLlama3.1-8Bモデルの重みデータをダウンロード

・モデルデータのAI Hubへのアップロードおよびコンパイル

・コンパイル後のContext Binaryのダウンロード

(llama3_1_8B) $ python -m qai_hub_models.models.llama_v3_1_8b_instruct.export --device "QCS8550 (Proxy)" --skip-inferencing --skip-profiling --output-dir genie_bundle

実行完了すると"output_dir"に設定したディレクトリ(今回の場合はgenie_bundle)に、モデルに相当するContext Binaryファイルが生成されます。エッジデバイスで実行時に必要なメモリーサイズを考慮して、変換過程でモデルを5分割しているので、Context Binary5個生成されます。

エッジデバイス上でLLMアプリ実行

先述のContext Binaryとテキスト推論アプリ、各種ライブラリー、設定ファイルをエッジデバイスに転送し、アプリを実行します。

エッジデバイス転送するファイルは下記の通りです。先述のContext Binary以外のファイルの取得方法については弊社までお問い合わせください。

 

Context Binary(モデル)

        llama_v3_1_8b_instruct_part_1_of_5.bin

        llama_v3_1_8b_instruct_part_2_of_5.bin

        llama_v3_1_8b_instruct_part_3_of_5.bin

        llama_v3_1_8b_instruct_part_4_of_5.bin

        llama_v3_1_8b_instruct_part_5_of_5.bin

 

【テキスト推論アプリ】

        genie-t2t-run

 

【トークナイザー】

        tokenizer.json

 

【コンフィグレーションファイル】

        genie_config.json

        htp_backend_ext_config.json

 

【ライブラリー】

        libGenie.so

        libQnnHtp.so

        libQnnHtpNetRunExtensions.so

        libQnnHtpPrepare.so

        libQnnHtpV73Skel.so

        libQnnHtpV73Stub.so

        libQnnSystem.so

 

ファイルの転送が完了したらアプリを実行します。

genie-t2t-runはQualcomm社のSDKに含まれるテキスト推論アプリで、コンフィグレーションファイルと入力プロンプトを受け取り、レスポンスを返します。

LLMはモデルによって異なるフォーマットを持っており、各モデルから意味のある出力を得るためには、そのモデルに適したプロンプトのフォーマットを使用することが重要です。これは各モデルのHugging Faceリポジトリーで確認できます。例えば今回使用するLlama3.1-8Bモデルの場合、下記のようなフォーマットでプロンプトを入力します。

 

■プロンプトフォーマット

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

You are a helpful assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>

What is the capital of Japan?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

 

準備が整ったので推論アプリを実行します。実行の様子については動画でご紹介します。

おわりに

本記事では、Qualcommの組込み向けSoC「QCS8550」上にMeta社のLlama 3.1-8Bモデルを実装し、エッジデバイス上でのテキスト推論アプリを動作させるまでの一連の手順をご紹介しました。Qualcomm AI Hubを活用することで、Hugging Faceから取得した大規模言語モデルを効率的に変換・最適化し、スクラッチ実装に比べて大幅にハードルを下げられる点を実感いただけたかと思います。


今後は、推論性能のさらなる改善やオンデバイスでのリアルタイム処理、マルチモデル運用など、より高度な活用シナリオに挑戦していくことが期待されます。

エッジ側でのAI実装は、通信遅延の低減やプライバシー保護といったメリットをもたらし、多様な産業分野での応用が広がりつつあります。ぜひ、Qualcommプロセッサーの組込み開発にお役立てください。

お問い合わせ

本ページの内容に関するご質問や製品詳細情報をご希望の方はこちらからお問い合わせください。

クアルコム メーカー情報Topへ