第5章 モデルのサービング (提供) およびモデルとのチャット
Red Hat Enterprise Linux AI 上のさまざまなモデルと対話するには、モデルをサービングしてサーバー上でホストし、その後モデルとチャットする必要があります。
5.1. モデルのサービング (提供) リンクのコピーリンクがクリップボードにコピーされました!
モデルと対話するには、サービング中にマシン内でモデルを有効にする必要があります。ilab model serve コマンドは、モデルとチャットできる vLLM サーバーを起動します。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
- InstructLab を初期化している。
- 希望の Granite LLM がインストールされている。
- マシンの root ユーザーアクセス権がある。
手順
モデルを指定しない場合は、次のコマンドを実行して、デフォルトのモデル
granite-7b-redhat-labを提供できます。$ ilab model serve特定のモデルをサービングするには、次のコマンドを実行します。
$ ilab model serve --model-path <model-path>コマンドの例
$ ilab model serve --model-path ~/.cache/instructlab/models/granite-8b-code-instructモデルが提供され、準備が整ったときの出力例
INFO 2024-03-02 02:21:11,352 lab.py:201 Using model 'models/granite-8b-code-instruct' with -1 gpu-layers and 4096 max context size. Starting server process After application startup complete see http://127.0.0.1:8000/docs for API. Press CTRL+C to shut down the server.
5.1.1. オプション: ilab model serve をサービスとして実行する リンクのコピーリンクがクリップボードにコピーされました!
ilab model serve コマンドが実行中のサービスとして実行されるように、systemd サービスを設定できます。systemd サービスは、バックグラウンドで ilab model serve コマンドを実行し、クラッシュまたは失敗した場合に再起動します。システムの起動時にサービスが起動するように設定できます。
前提条件
- Red Hat Enterprise Linux AI イメージがベアメタルにインストールされている。
- InstructLab を初期化している。
- 使用する Granite LLM をダウンロードしている。
- マシンの root ユーザーアクセス権がある。
手順
次のコマンドを実行して、
systemdユーザーサービスのディレクトリーを作成します。$ mkdir -p $HOME/.config/systemd/user次の例の設定を使用して、
systemdサービスファイルを作成します。$ cat << EOF > $HOME/.config/systemd/user/ilab-serve.service [Unit] Description=ilab model serve service [Install] WantedBy=multi-user.target default.target1 [Service] ExecStart=ilab model serve --model-family granite Restart=always EOF- 1
- 起動時にデフォルトで開始することを指定します。
次のコマンドを実行して、
systemdマネージャー設定を再ロードします。$ systemctl --user daemon-reload次のコマンドを実行して、
ilab model servesystemdサービスを開始します。$ systemctl --user start ilab-serve.service以下のコマンドを実行すると、サービスが実行中であることを確認できます。
$ systemctl --user status ilab-serve.service以下のコマンドを実行すると、サービスログを確認できます。
$ journalctl --user-unit ilab-serve.serviceシステムの起動時にサービスを起動できるようにするには、以下のコマンドを実行します。
$ sudo loginctl enable-lingerオプション:
systemdサービスを維持するために実行できるオプションのコマンドがいくつかあります。次のコマンドを実行すると、ilab-serve システムサービスを停止できます。
$ systemctl --user stop ilab-serve.service-
$HOME/.config/systemd/user/ilab-serve.serviceファイルから"WantedBy=multi-user.target default.target"を削除して、起動時にサービスが開始しないようにすることができます。
5.1.2. オプション: セキュアなエンドポイントからモデルへのアクセスを許可する リンクのコピーリンクがクリップボードにコピーされました!
systemd サービスを作成し、セキュアなエンドポイントを公開する nginx リバースプロキシーを設定することで、推論エンドポイントを提供し、他のユーザーがセキュアな接続で Red Hat Enterprise Linux AI で提供されるモデルと対話できるように指定できます。これにより、セキュアなエンドポイントを他のユーザーと共有し、ネットワーク経由でモデルとチャットできるようになります。
次の手順では自己署名証明書を使用しますが、信頼できる認証局 (CA) が発行した証明書を使用することを推奨します。
次の手順は、ベアメタルプラットフォームでのみサポートされます。
前提条件
- Red Hat Enterprise Linux AI イメージがベアメタルにインストールされている。
- InstructLab を初期化している。
- 使用する Granite LLM をダウンロードしている。
- マシンの root ユーザーアクセス権がある。
手順
次のコマンドを実行して、証明書ファイルと鍵のディレクトリーを作成します。
$ mkdir -p `pwd`/nginx/ssl/次のコマンドを実行して、適切な設定を指定して OpenSSL 設定ファイルを作成します。
$ cat > openssl.cnf <<EOL [ req ] default_bits = 2048 distinguished_name = <req-distinguished-name>1 x509_extensions = v3_req prompt = no [ req_distinguished_name ] C = US ST = California L = San Francisco O = My Company OU = My Division CN = rhelai.redhat.com [ v3_req ] subjectAltName = <alt-names>2 basicConstraints = critical, CA:true subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer [ alt_names ] DNS.1 = rhelai.redhat.com3 DNS.2 = www.rhelai.redhat.com4 次のコマンドを使用して、サブジェクト代替名 (SAN) が有効になっている自己署名証明書を生成します。
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout `pwd`/nginx/ssl/rhelai.redhat.com.key -out `pwd`/nginx/ssl/rhelai.redhat.com.crt -config openssl.cnf$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout次のコマンドを実行して、Nginx 設定ファイルを作成し、
pwd/nginx/conf.dに追加します。mkdir -p `pwd`/nginx/conf.d echo 'server { listen 8443 ssl; server_name <rhelai.redhat.com>1 ssl_certificate /etc/nginx/ssl/rhelai.redhat.com.crt; ssl_certificate_key /etc/nginx/ssl/rhelai.redhat.com.key; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ' > `pwd`/nginx/conf.d/rhelai.redhat.com.conf- 1
- サーバーの名前を指定します。この例では、サーバー名は
rhelai.redhat.comです。
以下のコマンドを実行して、新しい設定で Nginx コンテナーを実行します。
$ podman run --net host -v `pwd`/nginx/conf.d:/etc/nginx/conf.d:ro,Z -v `pwd`/nginx/ssl:/etc/nginx/ssl:ro,Z nginxポート 443 を使用する場合は、root ユーザーとして
podman runコマンドを実行する必要があります。セキュアなエンドポイント URL を使用して、サービング中の ilab マシンに接続できるようになりました。以下はコマンド例となります。
$ ilab model chat -m /instructlab/instructlab/granite-7b-redhat-lab --endpoint-url次のコマンドを使用して、サービング中の RHEL AI マシンに接続することもできます。
$ curl --location 'https://rhelai.redhat.com:8443/v1' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <api-key>' \ --data '{ "model": "/var/home/cloud-user/.cache/instructlab/models/granite-7b-redhat-lab", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }' | jq .ここでは、以下のようになります。
- <api-key>
- API キーを指定します。「モデルとチャットするための API キーの作成」の手順に従って、独自の API キーを作成できます。
オプション: サーバー証明書を取得して、Certifi CA バンドルに追加することもできます。
次のコマンドを実行してサーバー証明書を取得します。
$ openssl s_client -connect rhelai.redhat.com:8443 </dev/null 2>/dev/null | openssl x509 -outform PEM > server.crt証明書をシステムの信頼できる CA ストレージディレクトリーにコピーし、次のコマンドを使用して CA トラストストアを更新します。
$ sudo cp server.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust次のコマンドを実行すると、証明書を Certifi CA バンドルに追加できます。
$ cat server.crt >> $(python -m certifi)自己署名証明書を使用して
ilab model chatを実行できるようになりました。以下はコマンド例となります。$ ilab model chat -m /instructlab/instructlab/granite-7b-redhat-lab --endpoint-url https://rhelai.redhat.com:8443/v1