第8章 IBM Spyre AI アクセラレーターを備えた IBM Z での Podman による推論
IBM Spyre AI アクセラレーターを備えた IBM Z で実行されている Podman および Red Hat AI Inference Server を使用して大規模な言語モデルを提供し、推論します。
前提条件
- RHEL 9.6 を実行している IBM Spyre for Z AI アクセラレーターがインストールされている IBM Z (s390x)サーバーにアクセスできる。
- sudo アクセス権を持つユーザーとしてログインしている。
- Podman をインストールしている。
-
registry.redhat.ioにアクセスでき、ログインしている。 - Hugging Face アカウントがあり、Hugging Face アクセストークンが生成されている。
IBM Spyre AI アクセラレーターカードは、FP16 形式のモデルの重みのみをサポートします。互換性のあるモデルの場合、Red Hat AI Inference Server 推論エンジンは起動時に自動的に重みを FP16 に変換します。追加の設定は必要ありません。
手順
サーバーホストでターミナルを開き、
registry.redhat.ioにログインします。podman login registry.redhat.io
$ podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Red Hat AI Inference Server イメージをプルします。
podman pull registry.redhat.io/rhaiis/vllm-spyre:3.2.5
$ podman pull registry.redhat.io/rhaiis/vllm-spyre:3.2.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムで SELinux が有効になっている場合は、デバイスアクセスを許可するように SELinux を設定します。
sudo setsebool -P container_use_devices 1
$ sudo setsebool -P container_use_devices 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow lspci -vを使用して、コンテナーがホストシステムの IBM Spyre AI アクセラレーターにアクセスできることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
0381:50:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0382:60:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0383:70:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0384:80:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02)
0381:50:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0382:60:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0383:70:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02) 0384:80:00.0 Processing accelerators: IBM Spyre Accelerator (rev 02)Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーにマウントするボリュームを作成し、コンテナーが使用できるようにコンテナーのパーミッションを調整します。
mkdir -p ~/models && chmod g+rwX ~/models
$ mkdir -p ~/models && chmod g+rwX ~/modelsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
granite-
3.3-8b-instructモデルはmodels/フォルダーにダウンロードします。詳細は、Downloading models を参照してください。 利用可能な Spyre デバイスの IOMMU グループ ID を収集します。
lspci
$ lspciCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
0000:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0001:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0002:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev ff) 0003:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02)
0000:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0001:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02) 0002:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev ff) 0003:00:00.0 Processing accelerators: IBM Spyre Accelerator Virtual Function (rev 02)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各行は PCI デバイスアドレスで始まります(例
: 0000:00:00.0)。PCI アドレスを使用して、必要な Spyre カードの IOMMU グループ ID を確認します。以下に例を示します。
readlink /sys/bus/pci/devices/<PCI_ADDRESS>/iommu_group
$ readlink /sys/bus/pci/devices/<PCI_ADDRESS>/iommu_groupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
../../../kernel/iommu_groups/0
../../../kernel/iommu_groups/0Copy to Clipboard Copied! Toggle word wrap Toggle overflow IOMMU グループ ID (0)は、
readlink出力の末尾番号です。必要な Spyre カードごとに繰り返します。
readlink出力を使用して、必要な Spyre カードのIOMMU_GROUP_ID変数を設定します。以下に例を示します。IOMMU_GROUP_ID0=0 IOMMU_GROUP_ID1=1 IOMMU_GROUP_ID2=2 IOMMU_GROUP_ID3=3
IOMMU_GROUP_ID0=0 IOMMU_GROUP_ID1=1 IOMMU_GROUP_ID2=2 IOMMU_GROUP_ID3=3Copy to Clipboard Copied! Toggle word wrap Toggle overflow AI 推論サーバーコンテナーを起動し、必要な Spyre デバイスの IOMMU グループ ID 変数を渡します。たとえば、4 つの Spyre デバイス全体でエンティティー抽出用に設定された granite-3.3-8b-instruct モデルをデプロイします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ターミナルの別のタブで、API を使用してモデルにリクエストを送信します。
curl -X POST -H "Content-Type: application/json" -d '{ "model": "/models/granite-3.3-8b-instruct", "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jqcurl -X POST -H "Content-Type: application/json" -d '{ "model": "/models/granite-3.3-8b-instruct", "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<your_server_ip>:8000/v1/completions | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow