0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpyreでLLMを利用する際の環境設定

0
Posted at

以前の記事でSpyreを使ったLLMの起動方法について書きました。

この記事では、事前セットアップ情報まで記載していませんでした。
また、公式のドキュメントでは非rootユーザーでの使用を推奨しているので、ドキュメントに沿った方法を改めて記載します。

Spyreカードを使って、RHAII(Red Hat AI Inference)の vLLMコンテナを実行するための環境設定手順をまとめます。

Podman の rootless 構成を前提としており、root 作業と非 root 作業が分かれています。

前提環境

  • サーバー: IBM Power(Spyre カード搭載)
  • OS: RHEL9 または RHEL10
  • コンテナランタイム: Podman(rootless)
  • ホストメモリ: カード構成に合わせて 100GB〜200GB 以上推奨

必要な RHEL パッケージのインストール

まずは基本的なパッケージを入れておきます。

dnf -y install container-tools git git-lfs wget

container-tools には Podman が含まれています。
git-lfs は後で Hugging Face からモデルをクローンする際に必要になります。

servicereport のインストール

Spyreカードの設定を自動的に行う servicereport コマンドを使えるようにします。

IBM Power Systems Service Tools のインストール

下記の IBM サポートページから RPM を入手します。

Service and productivity tools

ページ内に ibm-power-repo パッケージのダウンロードリンクがあるので、そこから RPM ファイルを取得します。

RPM のインストールと初期設定

ダウンロードした RPM をインストールします。

rpm -ivh ibm-power-repo-latest.noarch.rpm

次に configure を実行します。ライセンス画面が表示されるので qy → Enter で同意します。

/opt/ibm/lop/configure

servicereport と関連パッケージのインストール

OSバージョンに合わせてインストールコマンドを使い分けます。
RMC接続用のパッケージがOSのバージョンに対応しものが提供されています。

RHEL9 の場合:

dnf -y install ServiceReport ibm-power-managed-rhel9

RHEL10 の場合:

dnf -y install ServiceReport ibm-power-managed-rhel10

root ユーザーとして実行する手順

1. 非 root ユーザーの作成

Podman を rootless で動かすための専用ユーザーを作成します。
ここでは senuser という名前で作成していますが、任意の名前に変更しても問題ありません。
以降の手順でも同じ名前を使い続けてください。

adduser senuser
passwd senuser

2. ServiceReport による Spyre カード設定

現在の設定を検証

servicereport -v -p spyre

初期状態では多くの項目が FAIL になることがありますが、これは正常です。

不正設定を自動修正

servicereport -r -p spyre

以下の内容が自動設定されます。

  • VFIO バインディング
  • udev ルール
  • sentient グループ
  • memlock
  • VFIO モジュール挿入

senuser を sentient グループへ追加

usermod -aG sentient senuser

3. モデルディレクトリのセットアップ

Spyre コンテナからモデルを参照するためのディレクトリを作成します。
sentient グループがアクセスできるよう権限を設定します。

install -d -m 0775 -o root -g sentient /opt/ibm/spyre/models/src

4. systemd / ログ / リソース委任の設定

systemd linger を有効化

senuser としてログインしていない状態でも Quadlet(systemd で管理する Podman コンテナ)が自動起動するよう設定します。
※ Quadletでの利用方法は別記事で書こうと思います。

loginctl enable-linger senuser

コンテナログを永続保存

-m 2755 はディレクトリに setgid ビットを立てており、グループが systemd-journal で統一されます。

install -d -m 2755 -o root -g systemd-journal /var/log/journal
sed -ri 's/^#?Storage=.*/Storage=persistent/' /etc/systemd/journald.conf
systemctl restart systemd-journald

senuser にリソース委任を許可

CPU、メモリなどのリソースを senuser のユーザー unit に委任できるようにします。

install -d -m 0755 -o root -g root /etc/systemd/system/user@.service.d
cat << EOF > /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset memory pids
EOF
systemctl daemon-reload

LPAR を再起動して変更を適用

カーネルモジュールの挿入や udev ルールを確実に反映させるために再起動します。

reboot

非 root ユーザー(senuser)として実行する手順

重要: root でログイン後に sudo su senuser で切り替えるのは NG です。
この方法では XDG_RUNTIME_DIR や D-Bus セッションが正しく初期化されず、Podman の rootless 環境が正常に動作しません。
必ず senuser として直接ログインしてください。

1. Quadlet 用 systemd ディレクトリを作成

mkdir -p ~/.config/containers/systemd

2. AI モデルのダウンロード

Hugging Faceには以下が必要です:

Git LFS を有効化してモデルをクローン

git lfs install
cd /opt/ibm/spyre/models/src

# 必須モデル
git clone https://huggingface.co/ibm-granite/granite-3.3-8b-instruct

# Embedding モデル(用途に応じて選択)
git clone https://huggingface.co/ibm-granite/granite-embedding-30m-english
git clone https://huggingface.co/ibm-granite/granite-embedding-125m-english
git clone https://huggingface.co/ibm-granite/granite-embedding-107m-multilingual
git clone https://huggingface.co/ibm-granite/granite-embedding-278m-multilingual
git clone https://huggingface.co/BAAI/bge-reranker-v2-m3

# その他サポートモデル(任意)
git clone https://huggingface.co/ibm-granite/granite-4.1-8b-fp8
git clone https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct
git clone https://huggingface.co/mistralai/Mistral-Small-3.2-24B-Instruct-2506
git clone https://huggingface.co/intfloat/multilingual-e5-large
git clone https://huggingface.co/intfloat/multilingual-e5-large-instruct

Spyre カードの ID 確認

コンテナ起動時に Spyre カードの PCIe ID を指定する必要があります。
以下のコマンドで確認できます。

lspci -d 1014:06a7

出力例:

0001:00:00.0 Processing accelerators: IBM Device 06a7 (rev 02)
0002:00:00.0 Processing accelerators: IBM Device 06a7 (rev 02)

0001:00:00.00002:00:00.0 がカード ID です。コンテナ起動時にスペース区切りで指定します。
例: AIU_IDS="0001:00:00.0 0002:00:00.0 0003:00:00.0 0004:00:00.0"

RHAIIコンテナの起動

エンティティ抽出用(カード1枚)

granite-4.1-8b-fp8 を使ってエンティティ抽出を行う構成です。
fp8 量子化モデルのため、カード1枚・100GB メモリで動作します。

export AIU_IDS="0001:00:00.0"   # lspci で確認したカード ID に変更してください
export HOST_MODELS_DIR=/opt/ibm/spyre/models/src
export VLLM_MODEL_PATH=/models/granite-4.1-8b-fp8
export AIU_WORLD_SIZE=1
export MAX_MODEL_LEN=3072
export MAX_BATCH_SIZE=16

podman run \
  --device=/dev/vfio \
  -v "${HOST_MODELS_DIR}:/models" \
  -e AIU_PCIE_IDS="${AIU_IDS}" \
  --pids-limit=0 \
  --userns=keep-id \
  --group-add=keep-groups \
  --security-opt label=disable \
  --memory=100G \
  -p 127.0.0.1:8000:8000 \
  registry.redhat.io/rhaii-early-access/vllm-spyre-rhel9:3.5.0-ea.1-1781067361 \
  --model "${VLLM_MODEL_PATH}" \
  -tp "${AIU_WORLD_SIZE}" \
  --max-model-len "${MAX_MODEL_LEN}" \
  --max-num-seqs "${MAX_BATCH_SIZE}"

インストラクション用(カード4枚)

より大きなコンテキスト長(32k)を設定した instruct 構成です。
カード4枚・200GB メモリを使用します。

export AIU_IDS="0001:00:00.0 0002:00:00.0 0003:00:00.0 0004:00:00.0"   # カード ID に変更してください
export HOST_MODELS_DIR=/opt/ibm/spyre/models/src
export VLLM_MODEL_PATH=/models/granite-4.1-8b-fp8
export AIU_WORLD_SIZE=4
export MAX_MODEL_LEN=32768
export MAX_BATCH_SIZE=32

podman run \
  --device=/dev/vfio \
  -v "${HOST_MODELS_DIR}:/models" \
  -e AIU_PCIE_IDS="${AIU_IDS}" \
  --userns=keep-id \
  --group-add=keep-groups \
  --security-opt label=disable \
  --pids-limit=0 \
  --memory=200G \
  --shm-size=2G \
  -p 127.0.0.1:8000:8000 \
  registry.redhat.io/rhaii-early-access/vllm-spyre-rhel9:3.5.0-ea.1-1781067361 \
  --model "${VLLM_MODEL_PATH}" \
  -tp "${AIU_WORLD_SIZE}" \
  --max-model-len "${MAX_MODEL_LEN}" \
  --max-num-seqs "${MAX_BATCH_SIZE}"

コンテナイメージのバージョンは Early Access のため更新される場合があります。最新のタグは RHAII のリリース情報を確認してください。

-p 127.0.0.1:8000:8000 のように localhost バインドにしているため、外部からの直接アクセスは不可です。
外部からアクセスしたい場合はリバースプロキシなどを経由してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?