NVIDIA NIMを使用したローカルLLAMA-3のデプロイ: 包括的なガイド

NVIDIA NIMを使用したLLAMA-3のローカルデプロイ: 包括的なガイド - クラウドまたはローカルマシンでの効率的な推論のために、NVIDIA NIMを使用してLLAMA-3モデルをデプロイする方法を学びます。セットアップ、パフォーマンステスト、OpenAI APIとの統合を網羅しています。

2025年2月24日

party-gif

大規模言語モデルの力を解き放つ - NVIDIAのNIMを使ってLLAMA-3モデルをセルフホストおよびデプロイする方法についてのガイドをご覧ください。この最先端の技術を活用して、AIプロジェクトを加速し、並外れたパフォーマンスを得る方法を発見してください。

大規模言語モデルのインファレンスにNVIDIA NIMをデプロイする方法

NVIDIA NIMを使ってLamaファミリーのモデルをクラウドやローカルマシンにデプロイするには、以下の手順に従ってください:

  1. 環境設定: ローカルマシンで実行する場合は、DockerエンジンとNVIDIAコンテナツールキットをインストールします。これらのリンクはビデオの説明に記載されています。

  2. APIキーの取得: NVIDIAアカウントに登録してAPIキーと個人キーを生成します。これらはリモートサーバーとの通信に必要です。

  3. Dockerコンテナの実行: 提供されたDockerコマンドを使ってコンテナを実行し、コンテナ名、GPU使用量、APIキー、モデルキャッシュの場所、ポートを指定します。これにより、Lama 3 8 billion instructモデルがダウンロードされ、セットアップされます。

  4. モデルとの対話: 提供されたcURLコマンドを使ってデプロイされたモデルと対話します。このコマンドはOpenAI APIの標準に従っているため、OpenAIクライアントを使って対話できます。

  5. APIのストレステスト: requestsライブラリを使ったPythonスクリプトでAPIエンドポイントに複数の並行リクエストを送信し、GPU使用率とスループットを監視します。

  6. OpenAI APIクライアントの使用: デプロイされたモデルにあわせてベースURLやその他のパラメータを更新することで、OpenAI APIクライアントをNVIDIA NIMと連携させる方法を示します。

NVIDIA NIMは、大規模言語モデルのインファレンスをデプロイするための便利で最適化された方法を提供します。他のデプロイオプションと比較して最大3倍の性能向上が期待できます。90日間の無料トライアルで、この解決策をさらに探索できます。

NVIDIA LaunchpadとGPU Metricsダッシュボードにアクセスする

NVIDIA LaunchpadとGPUメトリックスダッシュボードにアクセスするには、以下の手順に従ってください:

  1. NVIDIA Launchpadでは、Visual Studio CodeのようなコードIDEにアクセスできます。このIDEを使ってGPUインスタンスと対話し、Llama 3 8 billion instructモデルをデプロイできます。

  2. GPUメトリックスダッシュボードは、GPU使用状況と性能に関する詳細情報を提供するGrafanaダッシュボードです。このダッシュボードにアクセスして、GPU使用率、CUDAバージョン、GPUドライバーなどの関連メトリックスを監視できます。

  3. Grafanaダッシュボードでは、時間経過に伴うGPU使用状況を視覚的に表示できるため、パフォーマンスを追跡し、デプロイを最適化することができます。

  4. ターミナルでwatchコマンドを使うと、リアルタイムでGPU使用状況を監視できます。watch -n 1 nvidia-smiコマンドを実行すると、1秒ごとにGPU使用状況が更新され、GPU使用率の実時間ビューが得られます。

  5. GPUメトリックスダッシュボードとリアルタイム監視ツールにより、Llama 3 8 billion instructモデルのデプロイメントのパフォーマンス特性を理解し、リソース利用を最適化して効率的なインファレンスを実現できます。

NVIDIA NIM Dockerコンテナをセットアップする

NVIDIA NIMを使ってLlama 3 8 billion instructモデルをデプロイするには、以下の手順に従ってください:

  1. 提供されたIDEを開き、H100 GPUにアクセスできることを確認します。
  2. NVIDIAアカウントに登録してAPIキーを設定します。
  3. 以下のDockerコマンドを実行してNVIDIA NIMコンテナを起動します:
docker run -it --gpus all -e NVIDIA_API_KEY=$NVIDIA_API_KEY -p 8000:8000 --name llama-3-8b-instruct nvcr.io/nvidia/nim:latest --model-name llama-3-8b-instruct

このコマンドは以下のことを行います:

  • 「llama-3-8b-instruct」という名前のDockerコンテナを作成
  • 利用可能なすべてのGPUを使用
  • NVIDIA_API_KEYの環境変数を設定
  • NIMサーバーのポート8000を公開
  • NVIDIA NIMカタログの「llama-3-8b-instruct」モデルを使用
  1. コンテナが起動したら、提供されたcURLコマンドを使ってモデルと対話できます:
curl -X POST -H "Content-Type: application/json" -d '{"model": "llama-3-8b-instruct", "prompt": "Tell me a joke.", "max_tokens": 1000, "temperature": 0.7, "top_p": 0.95, "stop": ["\n"]}' http://localhost:8000/v1/completions

このcURLコマンドは、ローカルホスト:8000で実行されているNIMサーバーに「Tell me a joke.」というプロンプトを送信して、レスポンスを生成します。

  1. APIエンドポイントのストレステストには、提供されたPythonスクリプトtest_server.pyを実行できます。このスクリプトはNIMサーバーに複数の並行リクエストを送信し、GPU使用率を監視します。

  2. 最後に、OpenAI APIクライアントを使ってNIMサーバーと対話することもできます。ベースURLをNIMサーバーのアドレスとポートに更新する必要があります。

これらの手順に従うことで、NVIDIA NIMのDockerコンテナを使ってLlama 3 8 billion instructモデルをデプロイし、その性能をテストできます。

NVIDIA NIM APIと対話する

NVIDIA NIM APIと対話するには、簡単なcURLコマンドを使うことができます。このcURLコマンドは以下のことを行います:

  • ポート8000のローカルホストにPOSTリクエストを送信します。これはNVIDIA NIMサーバーが実行されているところです。
  • OpenAI互換のAPIを使用するため、OpenAIクライアントでNIMサーバーと対話できます。
  • Llama 3 8 billion instructモデルを使用するよう指定します。
  • OpenAIが期待するメッセージ構造を設定します。
  • max_tokenstemperatureなどの追加パラメータを設定できます。

これがcURLコマンドです:

curl -X POST -H "Content-Type: application/json" -d '{"model": "nlp/lama-3-8b-instruct", "messages": [{"role": "user", "content": "Tell me a joke"}], "max_tokens": 1000, "temperature": 0.7}' http://localhost:8000/v1/chat/completions

このcURLコマンドはNVIDIA NIMサーバーにリクエストを送信し、Llama 3 8 billion instructモデルからレスポンスを生成します。レスポンスはストリーミングで返され、トークンが順次表示されます。

APIエンドポイントのさらなるストレステストには、requestsライブラリを使ったPythonスクリプトを使うことができます。このスクリプトは50件のジョーク生成リクエストを並行して送信し、GPU使用率とスループットを監視します。

import requests
import threading

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
payload = {
    "model": "nlp/lama-3-8b-instruct",
    "messages": [{"role": "user", "content": "Tell me 50 jokes"}],
    "max_tokens": 1000,
    "temperature": 0.7,
    "stream": False
}

def send_requests():
    for _ in range(50):
        response = requests.post(url, headers=headers, json=payload)
        print(response.json())

threads = []
for _ in range(10):
    t = threading.Thread(target=send_requests)
    t.start()
    threads.append(t)

for thread in threads:
    thread.join()

このスクリプトは、NVIDIA NIMサーバーとOpenAI互換APIを連携する方法を示しています。NVIDIA NIMサーバーが大規模言語モデルのインファレンスに高パフォーマンスを発揮できることを、最大3倍の性能向上という観点から確認できます。

NVIDIA NIM APIエンドポイントをストレステストする

NVIDIA NIM APIエンドポイントのストレステストには、requestsライブラリを使ったシンプルなPythonスクリプトを使うことができます。以下の手順に従ってください:

  1. APIエンドポイントのURLを定義します。この例ではローカルホストを使用していますが、リモートサーバーにデプロイする場合は外部IPアドレスを使い、ポートフォワーディングを有効にする必要があります。

  2. 必要なヘッダー、特にContent-Typeヘッダーをapplication/jsonに設定します。

  3. ペイロードを作成します。これにはモデル名("model": "llama-3-8b-instruct"), プロンプト("prompt": "Tell me 50 jokes."), max_tokenstemperaturestopなどのパラメータが含まれます。

  4. send_requests()関数を定義し、requests.post()メソッドを使ってURL、ヘッダー、ペイロードを使ってリクエストを送信します。

  5. マルチスレッディングを使ってsend_requests()関数の複数のインスタンスを並行して実行し、APIエンドポイントに大量のリクエストを送信します。

  6. watchコマンドとnvidia-smiツールを使ってリアルタイムのGPU使用状況を監視します。

出力結果は、APIエンドポイントが多数の並行リクエストを処理できることを示しています。平均スループットは約2,500トークン/秒で、GPU使用率も高いことがわかります。

このストレステストは、NVIDIA NIMソリューションのスケーラビリティとパフォーマンスを実証しており、大規模言語モデルの本番環境デプロイに最適な選択肢であることを示しています。

OpenAI API Clientを使ってNVIDIA NIMを使う

OpenAI APIクライアントをNVIDIA NIMと連携させるには、以下の手順に従ってください:

  1. ベースURLをNVIDIA NIMインスタンスのURLに変更します。この例ではlocalhost:8000を使用しています:
openai.api_base = "http://localhost:8000"
  1. APIキーは不要です。NVIDIA NIMが認証を処理します。

  2. モデルをNVIDIA NIMホストのモデル、この場合は"meta-llama-38b-instruct"に設定します:

model = "meta-llama-38b-instruct"
  1. 生成するトークンの最大数、温度、ストリーミングの有無などのその他のパラメータを設定します:
response = openai.ChatCompletion.create(
    model=model,
    messages=[{"role": "user", "content": "Tell me 50 different jokes"}],
    max_tokens=1024,
    temperature=0.7,
    stream=True,
)
  1. ストリーミングレスポンスを反復処理し、生成されたテキストを出力します:
for chunk in response:
    print(chunk.choices[0].text, end="")

このアプローチにより、NVIDIA NIMが提供するパフォーマンスと簡単なデプロイメントを活用しつつ、馴染みのあるOpenAI APIクライアントを使うことができます。ストリーミングレスポンスにより、リアルタイムに生成されたテキストを取得できるため、レスポンシブなユーザー体験を実現できます。

結論

このビデオでは、NVIDIA NIMを使ってLama 3 8 billion instructモデルをクラウドやローカルマシンにデプロイする方法を探りました。NVIDIA NIMは、NVIDIA が開発したマイクロサービスで、言語モデルやその他のAIモデルなどの基盤モデルのデプロイを加速します。

NVIDIA NIM環境の設定、APIキーの生成、Lama 3モデルをデプロイするためのDockerコンテナの実行など、各手順を説明しました。また、複数のリクエストを同時に送信してモデルのパフォーマンスをテストし、GPU使用率とスループットを監視しました。

さらに、Open

FAQ