NVIDIA NIMで利用できる生成AI

AI

はじまり

リサちゃん
リサちゃん

なんか沢山のAIが転がっているなあ・・・

135ml
135ml

どれか使ってみたいな。

NVIDIA NIMとは?

NVIDIAは、生成AIを動かすために欠かせない半導体チップである「GPU」を作っている会社ですよね。2024-12-18時点で、そのシェアは市場トップです。

そして、そんなNVIDIAが運営している「NIM」という生成AI用のプラットフォームがあります。

この「NIM」では、NVIDIAが開発した生成AIやその他の雑多な生成AIを試しに使ってみたり、実際にビルドして利用することが可能になっています。今回は、そんなNVIDIA NIMで利用できる生成AIを実際に使ってみた記事を綴っていきます。

ちなみに、このプラットフォームの利用は、無料です

しかしながら、このNIMの個人アカウントでAPIにリクエストできる回数は、1000回が上限らしいです。それ以上は、法人アカウントとして作成しなければ利用できないみたいです。(APIではなくNIMプラットフォーム上でプロンプトするのであれば無限?)

NIMで使える生成AI。

NIMにはこちらのリンクから遷移することが出来ます。

Try NVIDIA NIM APIs
Experience the leading models to build enterprise generative AI apps now.

サイトを見てみると、沢山の生成AIが置いてありますね・・・。

このNIMで利用できる生成AIの一覧はこんな感じです。(2024-12-18時点で145個あるので一部だけ抜粋・・・。)

  • meta/sam2
  • writer/palmyra-creative-122b
  • nvidia/llama-3.2-nv-embedqa-1b-v2
  • nvidia/llama-3.2-nv-rerankqa-1b-v2
  • nvidia/usdcode
  • meta/llama-3.3-70b-instruct
  • university-at-buffalo/cached
  • nvidia/nv-yolox-page-elements-v1
  • baidu/paddleocr
  • nvidia/audio2face-3d
  • nvidia/corrdiff
  • nvidia/fourcastnet
  • hive/deepfake-image-detection
  • nvidia/llama-3.2-nv-rerankqa-1b-v1
  • nvidia/llama-3.2-nv-embedqa-1b-v1
  • nvidia/nemotron-4-mini-hindi-4b-instruct
  • ibm/granite-guardian-3.0-8b
  • shutterstock/edify-360-hdri
  • nvidia/llama-3.1-nemotron-70b-instruct
  • zyphra/zamba2-7b-instruct
  • institute-of-science-tokyo/llama-3.1-swallow-70b-instruct-v0.1

などなど・・・。

APIを叩いてみる。

それでは実際に、NIMで利用できる生成AIをいくつか試していきたいと思います。

NVIDIA/Llama-3.1-Nemotron-70B-Instruct

「Llama-3.1-Nemotron-70B-Instruct」は、LLM によって生成された応答の有用性を向上させるために NVIDIA によってカスタマイズされた大規模言語モデルです。

llama-3.1-nemotron-70b-instruct model by nvidia | NVIDIA NIM
Llama-3.1-Nemotron-70B-Instruct is a large language model customized by NVIDIA in order to improve the helpfulness of LL...

この「Nemotron-70B」モデルには、いくつか種類があり、「Base」、「Instruct」や「Reward」があります。

「Base」モデルは、基本的なモデルを指します。このモデルから、「Instruct」や「Reward」モデルに派生していく感じですね。

「Instruct」モデルは、プロンプトから合成データを生成することが出来る生成AIモデルです。なので、少ないプロンプトからより多くの情報量をアウトプットしてくれます。そしてそのデータを他のAIに学習させれば、より高品質な情報をアウトプット出来るようになりそうですね。

「Reward」モデルは、人間の好みや価値観に沿った行動や結果を出せるように、AI モデルを整合させるための生成AIモデルだそうです。つまり、その整合されたデータで学習させることで、より倫理的で、より人間的なアウトプットが出来るようになるみたいです。

「Llama-3.1-Nemotron-70B-Instruct」のプロンプト画面はこんな感じです。(既にプロンプトはしました。)

実際にプロンプトしてみます。

以下の英文を和訳して。
---
Creates diverse synthetic data that mimics the characteristics of real-world data.
---

このような回答が返ってきました。詳しい説明も付け足してくれています。

以下が英文の和訳です。

  1. 実際の現実世界のデータの特徴を模した、多様な合成データを作成する。

(より詳しく和訳する場合は、以下の点に注意してください)

  1. 「synthetic data」は「人工データ」または「合成データ」と訳されることが多いです。
  2. 「mimics」は「模倣する」または「模す」と訳されますが、「模倣」は少し硬い表現なので、「模す」や「似せる」という表現も使用されます。
  3. 「real-world data」は「現実世界のデータ」または「実際のデータ」と訳されますが、「現実世界」の部分は「現実の」や「実際の」と省略して訳されることもあります。

次に、Pythonランタイムからプロンプトしてみます。そのために、APIキーを発行する必要があります。

NVIDIAアカウントでログインして、APIキーを出力します。

そのAPIキーを使って、NemotronのAPIを叩きます。

from openai import OpenAI
import httpx

client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"
)

completion = client.chat.completions.create(
  model="nvidia/llama-3.1-nemotron-70b-instruct",
  messages=[{"role":"user","content":"以下の英文を和訳して。\n---\nCreates diverse synthetic data that mimics the characteristics of real-world data.\n---"}],
  temperature=0.5,
  top_p=1,
  max_tokens=1024,
  stream=True
)

for chunk in completion:
  if chunk.choices[0].delta.content is not None:
    print(chunk.choices[0].delta.content, end="")

Google ColabからAPIを叩く時に、「Client.__init__() got an unexpected keyword argument ‘proxies’」というエラーメッセージが表示されたら、以下の流れで対処します。

  1. !pip install --upgrade openai」でopenaiパッケージを更新しておきます。これで動かなかったら次の対応をする。
  2. !pip list」でhttpxパッケージのバージョンを確認する。0.28以上だったら、「!pip install httpx==0.27.2」で古いバージョンにダウングレードする。(httpxの非推奨の引数だった'proxies'が0.28で削除されたので、openaiパッケージが'proxies'を渡さないようにアップデートされるまでこの対応をする必要がある。)
  3. Colab Notebookのメニューバーの「Restart session」でカーネルを再起動する。そして実行してみる。

同じ感じの回答が返ってきました。

以下が英文の和訳です。 * 実世界のデータの特性を模倣する、多様な合成データを作成する。

NVIDIA/Nemotron-4-340B-Instruct

「NVDIA/Nemotron-4-340B-Instruct」は、実世界のデータの特性を模倣する、多様な合成データを生成するAIです。実際の現実世界のデータの特徴というのは、そのデータのパターン、分布、傾向などを指していて、その特徴に基づいて多様でリアルな合成データを自動生成する生成AIみたいです。(2024-12-18時点ではプレビュー版です。)

・・・と、「Llama-3.1-Nemotron-70B-Instruct」に訳してもらったら、「実際のデータが不足している場合に、学習データやテストデータを増やすことができる」ということも言っていました。

nemotron-4-340b-instruct Model by NVIDIA | NVIDIA NIM
Creates diverse synthetic data that mimics the characteristics of real-world data.

この「Nemotron-340B」モデルにも、いくつか種類があり、「Base」、「Instruct」や「Reward」があります。70Bモデルと比較したいので、今回は「Instruct」モデルを試していきます。

「NVIDIA/Nemotron-4-340B-Instruct」のプロンプト画面は、「Llama-3.1-Nemotron-70B-Instruct」の画面とほとんど変わりません。

実際にプロンプトしてみます。

以下の英文を和訳して。
---
Creates diverse synthetic data that mimics the characteristics of real-world data.
---

プロンプトしてみるとこのような回答が返ってきました。70Bよりもだいぶシンプルな回答が返ってきました。(英語の翻訳程度の作業に使うのは勿体ないか・・・)

実際のデータの特性を模倣した、多様な合成データを作成します。

次に、Pythonランタイムからプロンプトしてみます。

from openai import OpenAI

client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"
)

completion = client.chat.completions.create(
  model="nvidia/nemotron-4-340b-instruct",
  messages=[{"role":"user","content":"以下の英文を和訳して。\n---\nCreates diverse synthetic data that mimics the characteristics of real-world data.\n---"}],
  temperature=0.2,
  top_p=0.7,
  max_tokens=1024,
  stream=True
)

for chunk in completion:
  if chunk.choices[0].delta.content is not None:
    print(chunk.choices[0].delta.content, end="")

同じ感じの回答が返ってきました。

実際のデータの特性を模倣した、多様な合成データを作成します。

そして、「NVIDIA/Nemotron-4-340B-Instruct」のプロンプト画面では、「Projects」というタブがありました。

 「NVIDIA AI Workbench」という単語が出てきました。この「NVIDIA AI Workbench」というのは、事前学習済みの生成型 AI モデルおよび大規模言語モデル (LLMs) を簡単に作成、テスト、カスタマイズできる、統合された便利ツールキットのことだそうです。

それでは「Try this project」をクリックしてみます。

このような画面が表示されました。  ・・・・・・。

どうやら、「NVIDIA AI Workbench」はローカルに生成AI環境を構築する機能のようです。しかし、企業レベルでGPUのクラスターを構成していなければとても使える代物ではなさそうですね・・・。

NVIDIA/Consistory(画像生成)

「NVIDIA/Consistory」は、追加のトレーニングを必要とせずに、複数の画像シリーズ全体で一貫したキャラクターを生成するAIです。(このモデルも、2024-12-18時点ではプレビュー版です。)

consistory Model by NVIDIA | NVIDIA NIM
Generates consistent characters across a series of images without requiring additional training.

プロンプトする画面です。色々と入力する場所が分かれています。

Negative Promptも埋められますね。適当に埋めておいて、「Generate Anchors」をクリックします。(なんでNegative Promptが赤くなってるのかはよく分かりません。)

2枚のAnchor画像が生成されました。「Next Steps」に進みます。

次はこんな画面になりました。「Scenario Description」を入力します。「The old woman remembered a lack of breads. She went buying slices of bread and miscellaneous. Then, she was going home. However, she saw a lion and a tiger in the park by the way.」といったプロンプトで生成します。

パンを持った妙齢の女性の画像が生成されました。一応近くに鳥もいます。

シード値を変えてもう少し生成します。なんかちょっと分かってきたような気が・・・。

次は、虎と闘っている妙齢の女性をAnchorに作りたいと思います。生成中・・・。

そうそう、これこれ。

虎と闘っている妙齢の女性のAnchorを使って、「The old woman remembered a lack of breads. She went buying slices of bread and miscellaneous. Then, she was going home. However, she saw a lion and a tiger in the park by the way.」とScenarioにプロンプトして、別の画像を生成します。

そうすると、その別のシチュエーションで先程の虎と女性を描くことが出来ました。(Anchorにローカルにある画像をアップロードできたら用途が広がりそうですね。)

このモデルもPythonランタイムから実行してみます。

import requests, base64

invoke_url = "https://ai.api.nvidia.com/v1/genai/nvidia/consistory"
headers = {
    "Authorization": "Bearer $API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC",
    "Accept": "application/json",
}

payload = {
    "mode": 'init',
    "subject_prompt": "an old woman wearing a dress",
    "subject_tokens": ["woman","dress"],
    "subject_seed": 43,
    "style_prompt": "A photo of",
    "scene_prompt1": "walking in the garden",
    "scene_prompt2": "fighting a lion and a tiger wtih a large sword",
    "negative_prompt": "",
    "cfg_scale": 5,
    "same_initial_noise": False
}

response = requests.post(invoke_url, headers=headers, json=payload)
response.raise_for_status()

data = response.json()

for idx, img_data in enumerate(data['artifacts']):
  img_base64 = img_data["base64"]
  img_bytes = base64.b64decode(img_base64)
  with open(f'{idx}.jpg', "wb") as f:
      f.write(img_bytes)

シード値は先程と同じなので、先程と同じ画像をローカルで生成することが出来ました。「Generate Scenario」の部分は、まだAPIでは叩けないようです。

NVIDIA/Audio2face-3D

「NVIDIA/Audio2face-3D」は、ストリーミングオーディオをリアルタイムのリップシンクと顔のパフォーマンスに対応した顔のブレンドシェイプ(Facial Blendshapes)に変換してくれる生成AIです。つまり、音声を渡すとそれに合わせてキャラクターが喋ってくれるみたいです。

audio2face-3d Model by NVIDIA | NVIDIA NIM
Converts streamed audio to facial blendshapes for realtime lipsyncing and facial performances.

プロンプト画面はこんな感じです。インプットする音声サンプルを選ぶことが出来ます。表情の強さや自動で表情を付けるかを設定することも可能です。

実行してみると、右に映っている顔が動き始めました。

「Emotion Output」を開くと、その時々の表情の成分を表示することが出来ます。「Angry」が強い時や、「Joy」が強かったり。

顔は、別のものを選ぶことも可能です。

Shutterstock/Edify-3D

Shutterstockが提供している3D アセット生成AIです。NVIDIA Edify を使用して、Shutterstock のライセンス付きクリエイティブ ライブラリでトレーニングされているようです。

edify-3d Model by Shutterstock | NVIDIA NIM
Shutterstock Generative 3D service for 3D asset generation. Trained on NVIDIA Edify using Shutterstock’s licensed creati...

プロンプト画面はこんな感じです。既に緑色のイスが出力されています。このプロンプトは、「Image-to-3D」という種類のプロンプト形式です。

別のイラストでプロンプトしてみます。先程と違うイラストを選んだら、「Generate Preview」をクリックします。

表示されたプレビューから、「Generate 3D」をクリックします。

スケッチされたレーザーガンが3Dオブジェクトになりました。このオブジェクトはファイルとして出力することも可能です。

GLBファイルとして出力して、別のサイトで表示することが出来ました。Blenderとかで利用できそうですね。USDZファイルも開けるかもしれません。

また、「Text-to-3D」形式で3Dオブジェクトを生成することも可能でした。でもちょっと、のっぺりしてるような・・・。

プロンプトを「a redish raser gun」から「a redish raser gun, high detailed, glossy」に付け足すことで、もう少しディテールが細かく描かれたレーザーガンを生成することが出来ました。

Shutterstock/Edify-360-HDRi

Shutterstockの 3D 360 度 HDRi (ハイダイナミックレンジイメージ) 生成サービスです。つまり、360度のワールド生成が出来る生成AIです。NVIDIA Edify を使用して、Shutterstock のライセンス付きクリエイティブ ライブラリでトレーニングされているようです。

360度のワールドというのは、例えば「RICOH THETA」とかの360度カメラで撮影した時に出力できるような映像のことです。

edify-360-hdri Model by Shutterstock | NVIDIA NIM
Shutterstock Generative 3D service for 360 HDRi generation. Trained on NVIDIA Edify using Shutterstock’s licensed creati...

プロンプト画面はこんな感じです。元々プロンプトされていて、その生成結果が表示されていました。

プロンプトを「a flat lookout point in the city with sunrise, a few autumn birch trees and beautiful skyscrapers in the background, god rays, dappled light shining through branches, scenic nature, inspiring, landscape panoramic, cityscape」という風に書き変えて生成してみます。

すると、先程表示されていたものとは違う情景が表示されました。

「Generate 8K HDRi」をクリックして、8Kバージョンのものを生成してダウンロードします。そして、ダウンロードした圧縮ファイルを伸長した中に入っていたファイルは、Affinity Designer上で表示することが出来ました。

まとめ

今回の記事は、「NIM」というNVIDIAが運営している生成AIをビルドできるプラットフォームおよびそこで利用できる生成AIに関して紹介しました。

プラットフォーム内での利用は無料ですし、APIも利用回数の制限がありながらも無料でした。この機会に色々なAIを触ってみたいですね。

おしまい

リサちゃん
リサちゃん

色々出来そうで楽しい!

135ml
135ml

しかし、APIキーの利用制限がな・・・。

以上になります!

コメント

タイトルとURLをコピーしました