プライベート大規模言語モデル・サービスのスタート・ガイド- パート1 (2026/08/12)

プライベート大規模言語モデル・サービスのスタート・ガイド- パート1 (2026/08/12)

https://blogs.oracle.com/database/getting-started-private-llm-service-part1

投稿者:Doug Hood | Product Manager for Oracle AI Vector Search and Private AI Services Container

この2部構成のブログでは、CPU駆動のOCI仮想マシン上で、Private AI Services Container 26.2.1のPrivate Large Language Model Serviceをデプロイして使用する方法を説明します。

パート1では、VMを作成し、大容量のAVX-512コンテナイメージをダウンロードし、デフォルトのLLMを使用してチャットを行います。

パート2では、Hugging FaceからオープンウェイトLLMをダウンロードし、llama.cppおよびvLLMランタイムで使用する方法を学びます。また、LLMの状態を確認する方法、Hugging FaceトークンとSSLを使用する方法についても学びます。

llama.cppおよびvLLMランタイムは、プライベート大規模言語モデルサービスの動作に使用されます。

同じサービスは、オンプレミス環境、エアギャップ環境、またはパブリッククラウドで実行できます。このチュートリアルでは、OCIにおけるCPUのデプロイに焦点を当てます。GPUのデプロイやその他のクラウド環境でのデプロイについては、今後のブログで取り上げます。

2.サイズは重要

大規模言語モデルは実行に多くのリソースを必要とします。パラメータ数が増えると一般的にモデルのリソース要件も増加しますが、モデルの機能とパフォーマンスは、アーキテクチャ、トレーニング、最適化、ワークロードなどの要因によって異なります。しかし、大規模なLLMは実行に多くのリソースを必要とし、結果として処理速度が低下する傾向があります。このため、さまざまなサイズと機能のトレードオフと最適化が行われてきました。 

簡略化されたサイジングフレームワークとして、モデルはいくつかのパラメータ範囲に分類できます。適切なモデルサイズは、モデル、ワークロード、精度要件、レイテンシ要件、および利用可能なハードウェアによって異なります。これらのトレードオフにより、LLMは一般的に次の3つの異なるサイズ範囲に収まります。

  • 最大100億個のパラメータ
    • これらは、小型言語モデルと呼ばれることもあります。
    • これらのモデルは、より単純な操作に適している傾向があります。
      • チャット
      • 検索拡張生成(RAG)
      • エージェントを呼び出すツール
  • 100億から700億のパラメータ
    • これらのモデルは、中程度の複雑さのタスクに適している傾向があります。
      • チャット
      • 検索拡張生成(RAG)
      • エージェントを呼び出すツール
      • コーディングエージェント
  • 700億を超えるパラメータ
    • GLM 5.2Ornith-1.0-397BのようなオープンウェイトLLMは非常に大規模で、 GPT 5.6やClaude Fabel 5のような最先端モデルの能力に匹敵する。
    • こうしたモデルは、「思考」や推論を伴う最も困難な課題において必要とされる傾向がある。

十分な性能を持つLinuxサーバーがあれば、プライベート大規模言語モデルサービスは、上記3つの異なるサイズ範囲に対応できます。これは実際には次のことを意味します。

  • CPUメモリ(RAM)=モデルサイズ

オープンウェイトLLMはより多くのメモリを必要とします。利用可能なメモリは、モデルの重み、実行時オーバーヘッド、コンテキストまたはKVキャッシュ、オペレーティングシステム、およびその他のプロセスに対応できるものでなければなりません。実際の要件は、量子化コンテキスト長、並行処理、および実行時間によって異なります。

  • CPUコア数=スケーラブルなパフォーマンス

LLM推論では、数百万もの行列乗算演算が行われます。これらの演算は、CPUコア間で並列処理できます。モデル、実行時間、ワークロードによっては、利用可能なCPUリソースを増やすことで、推論のレイテンシとスループットを向上させることができます。

  • ディスク容量 = ダウンロードしたLLMファイルの数とサイズ

ダウンロードするLLMファイルはそれぞれ数GBのディスク容量を消費します。複数の異なるLLMファイルをテストすると、ディスク容量はすぐに膨れ上がってしまう可能性があります。

3.仮想マシンを作成する

10億から200億のパラメータ範囲でLLMを使用できるようにするには、Oracle Cloud Infrastructure上に以下の属性を持つ仮想マシンを作成します。

  • オペレーティングシステム: Oracle Linux 9
  • 形状VM.Standard.E6.Flex
  • CPU 8 OCPU
  • メモリ:64GB RAM
  • ストレージ:カスタムブートボリュームサイズ150GB

8個のOCPUを使用することは、性能とコストのトレードオフである。

サイズに関する考慮事項

CPU とオープンウェイト LLM を使用する場合、以下の点を考慮する必要があります。

  • LLMは、あなたのユースケースに役立つほど十分な大きさですか?
  • あなたのユースケースに役立つ最小のLLMは何ですか?
  • LLMは利用可能なメモリ(RAM)内に収まりますか?
  • レイテンシとスループットの観点から見て、許容できる推論性能とはどのようなものか
  • CPUコア数を増やすとレイテンシとスループットは向上するが、ハードウェアのコストも高くなる。
  • ダウンロードするすべてのLLMファイルを保存するのに十分なディスク容量はありますか?

ブートボリュームを拡張する

VMが作成され、ログインしたら、OCIブートボリュームを拡張してディスク容量をすべて利用できるようにする必要があります。これを怠ると、Hugging FaceからコンテナとオープンウェイトLLMをダウンロードするためのディスク容量が不足します。

Linuxのopcユーザーとして、シェルで以下のコマンドを実行してください。

クリップボードにコピーされました
エラー: コピーできませんでした
sudo /usr/libexec/oci-growfs -y
df -h

ブートボリュームには、現在約121GBの空きディスク容量があるはずです。

4. VM環境を構成する

プライベートAIサービスコンテナをインストール、設定、実行するには、いくつかのディレクトリと環境変数が必要です。

Linuxシェルで、以下のコマンドを実行してください。

クリップボードにコピーされました
エラー: コピーできませんでした
mkdir -p /home/opc/privateai
mkdir -p /home/opc/config
mkdir -p /home/opc/models
mkdir -p /home/opc/secrets
export PRIVATE_DIR=/home/opc/privateai
export SECRETS_DIR=/home/opc/secrets
export CONFIG_DIR=/home/opc/config
export HOST=$(hostname -f); echo $HOST

5.適切なコンテナを選択する

プライベートAIサービスコンテナは、  7つの専用コンテナイメージを含む単一の製品です。  

この演習では、以下のコンテナを使用します。

  • large-cpu-avx512-infer-26.2.1.0.0

このコンテナにはデフォルトのLLMが含まれており、avx512アーキテクチャを搭載したCPU上で動作するコンテナ向けにプライベート大規模言語モデルサービスを有効にします。

6.コンテナをダウンロードする

ダウンロード手順は以前のリリースと同じです。このブログではその手順について説明します。このブログで特に重要なのは、Oracle Container Registryにログインするために必要な認証トークンを取得する方法です

重要なコマンドは以下のとおりです。

  • sudo dnf install -y container-tools
  • podman login container-registry.oracle.com
  • IMAGEID=`podman create container-registry.oracle.com/database/private-ai: large-cpu-avx512-infer-26.2.1.0.0 `
  • podman cp $ IMAGEID:/privateai/scripts/privateai-setup-large-cpu-avx512-infer-26.2.1.0.0.zip .
  • unzip privateai-setup-large-cpu-avx512-infer-26.2.1.0.0.zip

上記のコマンドは、Podmanをインストールし、Oracle Container Registryからコンテナをダウンロードし、ZIPファイルを解凍し、インストールスクリプトを含むファイルを解凍します。

7. コンテナをインストールする

コンテナをインストールして起動するには、Linuxシェルで以下のコマンドを実行してください。

クリップボードにコピーされました
エラー: コピーできませんでした
cd /home/opc/setup
./secretsSetup.sh -s $SECRETS_DIR
./configSetup.sh -d $PRIVATE_DIR -s $SECRETS_DIR
./containerSetup.sh -d $PRIVATE_DIR --http

この例では、コンテナはHTTPネットワークプロトコルとデフォルトのTCPポート8080を使用するように構成されています。

コンテナの状態を確認する

数秒後には、コンテナが起動したことを示すメッセージが表示されるはずです。 

コンテナの起動には複数の段階があり、それらはバックグラウンドで実行されます。デフォルトのLLMが初めて使用される場合、準備が整うまで最大3分かかることがあります。

コンテナの実行中にその状態を確認するには、次のコマンドを使用します。

クリップボードにコピーされました
エラー: コピーできませんでした
podman ps

LLMがディスクからロードされている間、コンテナの状態は「開始中」となります。

コンテナがメモリに完全にロードされると、状態は「異常」となり、リクエストを処理する準備が整うと最終的に「正常」な状態になります。

コンテナの状態を確認してください

コンテナの /health RESTエンドポイントを確認するには、次のcURLコマンドを使用します。        

クリップボードにコピーされました
エラー: コピーできませんでした
curl -i http://localhost:8080/health

上記のような有効なHTTPレスポンスが得られた場合、コンテナはリクエストを処理する準備ができています。エラーが発生した場合は、コンテナはまだリクエストを処理する準備ができていません。

ロードされたモデルを確認してください

ダウンロードしたlarge -cpu-avx512-infer-26.2.1.0.0コンテナイメージには、デフォルトでLLMといくつかの埋め込みモデルが設定されています。

Linuxシェルで以下のコマンドを実行すると、利用可能なモデルを検索できます。

クリップボードにコピーされました
エラー: コピーできませんでした
curl http://localhost:8080/v1/models | jq

jqコマンドラインユーティリティは、JSON出力を読みやすくするために整形表示します。jqユーティリティは、Oracle Linux 9にデフォルトで搭載されています

出力は以下のようになります。

  • 読み込まれたMinistral-3-3B-Rasoning-2512-GGUF-Q8_0モデルは、Mistral.aiの30億パラメータのLLMです。
  • その他のモデルは、ONNXランタイムのデフォルトのベクトル埋め込みモデルです。
  • これは、large-cpu-avx512-infer-26.2.1.0.0コンテナが、設定なしで LLM の推論を実行し、ベクトルを作成できることを意味します。

8. LLM担当者とチャットする

  • 上記の画像は、プライベートAIサービスコンテナで使用されているOpen WebUIを示しています。
  • Open WebUIでプライベートAIサービスコンテナを使用するように設定する方法については、今後のブログ記事で解説します。

Oracle Private Agent FactoryOpen WebUI 、 AnythingLLMなどの高度なLLMクライアントを使用してプライベートAIサービスコンテナとチャットすることもできますが、このブログの例ではcURLユーティリティを使用しています。cURLはインストールや設定が不要なため、最も簡単にテストできるチャットクライアントです。

プライベートAIサービスコンテナは、/v1/chat/completionsエンドポイントのOpenAI APIのRESTインターフェースを実装しています。つまり、有効なRESTリクエストを作成する必要があります。最も簡単な方法は、LinuxのcURLコマンドラインユーティリティを使用することです。cURLはHTTP POSTリクエストを実行するために使用できます。正しい構文を使用すれば、HTTP POSTリクエストは有効なOpenAI APIリクエストであるRESTメッセージになります。

このRESTメッセージに含まれる重要な情報は以下のとおりです。

  • 使用されるLLMモデル
  • LLMに送信されるメッセージ/プロンプト
  • プライベートAIサービスコンテナのURL

以下の例では、URLにlocalhostを使用しています。プライベートAIサービスコンテナが動作するホストのIPアドレスまたは完全修飾ドメイン名もURLに使用できます。つまり、cURLコマンドは、プライベートAIサービスコンテナがローカル環境でもリモート環境でも実行できます。

cURLを使ったチャット

以下のcURLコマンドを実行するスクリプトを作成し、cURLを使用してデフォルトのMinistral-3-3B-Reasoning-2512-Q8_0 LLMとチャットします。cURLスクリプトの出力は、jqユーティリティにパイプされ、JSON出力が整形されて表示されます。

クリップボードにコピーされました
エラー: コピーできませんでした
curl --noproxy '*' -X POST --header 'Content-Type: application/json' --header "Authorization: Bearer $API_KEY" --cacert $SECRETS_DIR/cert.pem  --data '{
        "model": "Ministral-3-3B-Reasoning-2512-Q8_0",
        "messages":[
                {"role": "user", "content": "Format the output as HTML. What does the SELECT statement in SQL do?"}
        ],                             
        "max_tokens": 2048,
        "temperature": 0.7,
        "stream": false
}' http://localhost:8080/v1/chat/completions | jq

出力は次のようになります。

  • この例では、このブログで説明されている構成を使用した場合、応答時間は約18秒でした。結果は、モデル、構成、プロンプト、ワークロード、および利用可能なコンピューティングリソースによって異なります。
  • 規模の大きいLLMは、リクエストへの対応に時間がかかる傾向がある。
  • ワークロードと構成によっては、追加のCPUリソースによって応答時間を短縮できる場合があります。
  • 今後の投稿では、他のLLMについても取り上げる予定です。

出力はLLMによって異なります。この例では次のようになります。

  • コンテンツにはHTMLのような形式の回答が表示されます

ChromeでレンダリングされたコンテンツセクションのHTMLは次のようになります。

つまり、簡潔に言えば「正しい」のですが、HTMLの記述方法が最適ではありませんでした。

パート2では、他のオープンウェイトLLMからの、より適切な形式の回答を見ることができます。

9.まとめ

このブログでは、CPUを搭載したOCI VM上でプライベート大規模言語モデルサービスをダウンロード、インストール、設定し、チャットする方法を学びました。また、HTTP用のcURLユーティリティを使用してLLMとチャットする方法も学びました。

このブログのパート2では、次のような内容を取り上げています。

  • ストリーミングチャットを使用する
  • llama.cpp のモデルをダウンロードしています
  • vLLM用のモデルをダウンロードしています
  • Hugging Faceトークンの使用
  • SSLを使用する

関連ブログ

  • プライベートLLMサービス入門 – パート2
  • プライベートLLMサービスでDBMS_VECTOR_CHAINを使用する

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

OCI Object Storageアクセス制御ポリシーの構成 (2024/04/25)