【NVIDIAのLlama-3.1-Nemotron-70B-Instruct】Claude 3.5 SonnetやGPT-4o超える実力を検証!
2024年10月、NVIDIAから新たなLLMモデルが登場!
従来のLLMモデルに比べベンチマークに優れており、2024年10月1日時点ではGPT-4oやClaude 3.5 Sonnetよりもハイパフォーマンスです!
本記事ではLlama-3.1-Nemotron-70B-Instructを紹介しつつ、実装する方法もお伝えしていきますので、最後まで読むことでLlama-3.1-Nemotron-70B-Instructを扱うことができるようになります!
ぜひ最後までお読みください!
Llama-3.1-Nemotron-70B-Instructの概要
Llama-3.1-Nemotron-70B-Instructはユーザーのクエリに対するLLM生成応答の有用性を向上させることを目的としています。
このモデルは、Arena Hard、AlpacaEval 2 LC、MT Benchなどのベンチマークで高いスコアを獲得しており、特にGPT-4oやClaude 3.5 Sonnetなどのモデルよりも良い成績を残しています。
トレーニングには、RLHF (REINFORCE)とHelpSteer2-Preferenceプロンプトが使用されており、初期ポリシーとしてLlama-3.1-70B-Instructモデルが採用。また、HuggingFace Transformersコードベースで利用できるように変換されたバージョン「Llama-3.1-Nemotron-70B-Instruct-HF」も提供されています。
Llama-3.1-Nemotron-70B-Instructの特徴
Llama-3.1-Nemotron-70B-Instructは従来のLLMモデルと比較して、いくつかの点で優れた性能を発揮。それはLlama-3.1-Nemotron-70B-Instructの性能はArena Hardの結果からも一目瞭然です。
従来のLLMモデルとLlama-3.1-Nemotron-70B-Instructを比較すると、優れた有用性、RLHFによる微調整、HelpSteer2のデータセットの活用、推論の最適化などによって、性能が向上しています。
優れた有用性
Llama-3.1-Nemotron-70B-Instructは、ユーザーの質問に対する応答の有用性を向上させるように開発。
特に、Arena Hard、AlpacaEval 2 LC、GPT-4-Turbo MT-Benchといった、3つのベンチマークすべてにおいて、2024年10月1日時点で1位にランクインしています。これらのベンチマークは、LMSys Chatbot Arena Eloを予測する上で重要で、これは、従来のLLMモデルと比較して、より人間らしい、有益で、正確な応答を生成できることを示唆しています。
RLHFによる微調整
Llama-3.1-Nemotron-70B-Instructは、RLHF (Reinforcement Learning from Human Feedback)を用いて、Llama-3.1-70B-Instructモデルをベースに微調整。
具体的には、REINFORCEアルゴリズム、Llama-3.1-Nemotron-70B-Reward、HelpSteer2-Preferenceプロンプトを用いてトレーニングしており、これにより、ユーザーのフィードバックを反映した、より洗練された応答を生成することが可能となっています。
HelpSteer2データセットの活用
HelpSteer2データセットは、21,362のprompt-responseペアで構成されており、モデルを人間の好みに合わせるように設計されており、より有用で、事実に基づいて正しく、一貫性があり、複雑さと冗長性に基づいてカスタマイズ可能な応答を生成することを目指しています。
Llama-3.1-Nemotron-70B-Instructは、このデータセットを用いてトレーニングされているため、従来のLLMモデルと比較して、より人間らしい応答を生成することが可能。
推論の最適化
NVIDIAは、高スループットと低レイテンシに重点を置いた最適化された推論ソリューションであるNVIDIA TRT-LLMに基づいて、モデルの展開を容易にするNVIDIA NeMo Frameworkを使用した推論を実証しています。
これにより、従来のLLMモデルと比較して、より高速かつ効率的な推論が可能になっています。
ただし、数学などの専門分野でのパフォーマンスについては、調整されていないことに注意が必要です。
HelpSteer2について
HelpSteer2-Preferenceは、大規模言語モデルの報酬モデルをトレーニングするために利用される高品質なデータセットです。
このデータセットは、既存のHelpSteer2データセットをベースにしており、プロンプトと応答ペアに対して好みの方向や強度、理由をアノテーションするという特徴があります。これにより、LLMがユーザーの指示により適切に従うことを目指したモデルの開発が進められています。
報酬モデルは、LLMが指示に従い、有益かつ安全に応答できるようにするために非常に重要。
これまで報酬モデルのトレーニングには、Bradley-Terry方式やRegression方式が主に使われてきましたが、どちらが優れているかということは未解決でした。というのも、それぞれが異なるデータ形式を必要とするため、適切な比較ができなかったからです。
そこでHelpSteer2-Preferenceでは、Bradley-Terry方式の好みのアノテーションが追加され、Regression方式のデータ(レーティング)と併用することで、これらの方式の直接比較が可能となりました。
HelpSteer2-Preferenceは、アノテーターにプロンプトと2つの回答を提供し、それぞれの回答を有用性や正確性、一貫性、複雑さ、冗長性といった次元で評価させます。
さらに、アノテーターは7つの好みの選択肢から1つを選び、その理由を記録。アノテーターは必ずいずれかの回答を好む選択をしなければならず、優柔不断な回答を排除してより精度の高い好みの情報を取得します。
各タスクには3〜5人のアノテーターが関与し、最も類似した3つの好みのアノテーションの平均値が最終的なデータとして使用されます。この厳格なプロセスを経て、トレーニング用に6,766ペア、バリデーション用に352ペアが収録された高品質なデータセットが作成されました。
HelpSteer2-Preferenceのメリットとして、高品質なデータや多様なタスク、好みの理由のアノテーションが含まれること、そしてオープンソースである点が挙げられます。
Llama-3.1-Nemotron-70B-Instructモデルのパフォーマンス
Llama-3.1-Nemotron-70B-Instructモデルは、以下の3つのベンチマークでトップパフォーマンスを達成しています。
- Arena Hard:Arena HardはLMSys Chatbot ArenaにおけるEloレーティングを予測するベンチマークです。Llama-3.1-Nemotron-70B-Instructは、この指標で85.0というスコアを達成し、GPT-4oやClaude 3.5 Sonnetなどのモデルを凌駕。 2024年10月1日現在、このモデルは3つの自動アライメントベンチマークすべてで1位にランクされています。
- AlpacaEval 2 LC:AlpacaEval 2 LCは、大規模言語モデルの命令追従能力を評価するベンチマークです。Llama-3.1-Nemotron-70B-Instructは、この指標で57.6というスコアを達成しています。特に、検証済みタブにおいて、2024年10月1日時点で最高のパフォーマンスを発揮しています。
これらの評価指標は、大規模言語モデルの有用性、人間らしさ、正確性を評価するために設計されており、Llama-3.1-Nemotron-70B-Instructがこれらの指標でトップパフォーマンスを達成していることは、このモデルが従来のLLMモデルと比較して、より高度な能力を持っていることを示唆しています。
Llama-3.1-Nemotron-70B-Instructのライセンス
Llama-3.1-Nemotron-70B-InstructはLlama 3.1 Communityライセンスです。そのため、月間アクティブユーザーが700万人未満の場合は商用利用可能。それを超える場合はMetaの許可が必要になります。
利用用途 | 可否 |
---|---|
商用利用 | ⭕️ |
改変 | ⭕️ |
配布 | ⭕️ |
特許使用 | ⭕️ |
私的使用 | ⭕️ |
なお、画像認識ができるLlama 3.2について詳しく知りたい方は、下記の記事を合わせてご確認ください。
Llama-3.1-Nemotron-70B-Instructの使い方
Llama-3.1-Nemotron-70B-InstructはHugging Faceにコードが掲載されているので、そちらを参考に実装可能です。
ただし、Hugging Faceのページにも書かれていますが、「ダウンロードに対応するために、少なくとも 150 GB の空きディスク容量を備えた 2 つ以上の 80 GB GPU (NVIDIA Ampere 以降) 」という条件が書かれています。
Google ColaboratoryのA100でも40GBであり、実際に実装をしましたが、40-50分程度実行していても実行が終了せず、かなり重たいことがわかりました。
以下がGoogle Colaboratoryで実装した時の環境です
■PythonのバージョンPython 3.8以上
■使用ディスク量163.7 / 235.7 GB
■GPU RAMの使用量33.2 / 40.0 GB
■システムRAMの使用量81.5 / 83.5 GB
サンプルコードはこちら
!pip install transformers torch accelerate
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "How many r in strawberry?"
messages = [{"role": "user", "content": prompt}]
tokenized_message = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt", return_dict=True)
response_token_ids = model.generate(tokenized_message['input_ids'].cuda(),attention_mask=tokenized_message['attention_mask'].cuda(), max_new_tokens=4096, pad_token_id = tokenizer.eos_token_id)
generated_tokens =response_token_ids[:, len(tokenized_message['input_ids'][0]):]
generated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
print(generated_text)
# See response at top of model card
NVIDIAによってデモも用意されているので、実行結果を確認したい場合には、デモを使うのも手です
Llama-3.1-Nemotron-70B-InstructをAPI経由で使用
Huffing Faceからダウンロードして実行するとなかなか推論結果を得ることができないため、API経由で推論結果を得てみます。
コードは右側に記載されているので、APIを取得してコードをコピペして実行します
APIキーを取得するにはNVIDIAのアカウント登録後、画面右上の「Get API Key」をクリックすれば取得できます。
しかも取得後はコードに勝手にAPIキー入力されます!すごい!
API経由での実装コードはこちら
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/llama-3.1-nemotron-70b-instruct",
messages=[{"role":"user","content":"Write a limerick about the wonders of GPU computing."}],
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="")
APIを経由したデモ動画は以下です。
Llama-3.1-Nemotron-70B-Instructと他のLLMで同じ内容を検証
Llama-3.1-Nemotron-70B-Instructのパフォーマンスは他のLLMよりも優れていることが報告されています。
そこで、本記事では、Llama-3.1-Nemotron-70B-InstructとGPT-4o、Claude 3.5 Sonnetに同じ内容を投げかけ、出力がどう変化するのかを比較してみたいと思います!
検証する内容は以下の2つです。
1.取引先に対して、アポイントメントのメールを作成してください。
2.あなたは、優秀なビジネスマンです。以下の内容をもとに、欠勤メールの文章をリライトしてください。
#メール内容
よう!くそパイセン!
昨日の飲み会のせいで2日酔い酷くて朝から死ぬほど頭痛いんで、会社休むわー
今日の俺の業務も代わりにやっといてー
あ、あと明日は会社行けたら行く
よろー
#条件
– 敬語を正確に使う
– 不適切な内容は排除してください。
– 悪い言葉をすべて丁寧な言葉に変える
– 文章最後に電子署名を入れる
#出力
本文:
Llama-3.1-Nemotron-70B-Instructアポイントメール作成コードはこちら
from openai import OpenAI
client = OpenAI(
base_url = "https://integrate.api.nvidia.com/v1",
api_key = "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"
)
completion = client.chat.completions.create(
model="nvidia/llama-3.1-nemotron-70b-instruct",
messages=[{"role":"user","content":"取引先に対して、アポイントメントのメールを作成してください。"}],
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="")
Llama-3.1-Nemotron-70B-Instruct欠勤メールの文章をリライトコードはこちら
from openai import OpenAI
client = OpenAI(
base_url = "https://integrate.api.nvidia.com/v1",
api_key = "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"
)
completion = client.chat.completions.create(
model="nvidia/llama-3.1-nemotron-70b-instruct",
messages=[{"role":"user","content":"""
あなたは、優秀なビジネスマンです。以下の内容をもとに、欠勤メールの文章をリライトしてください。
#メール内容
よう!くそパイセン!
昨日の飲み会のせいで2日酔い酷くて朝から死ぬほど頭痛いんで、会社休むわー
今日の俺の業務も代わりにやっといてー
あ、あと明日は会社行けたら行く
よろー
#条件
- 敬語を正確に使う
- 不適切な内容は排除してください。
- 悪い言葉をすべて丁寧な言葉に変える
- 文章最後に電子署名を入れる
#出力
本文:
"""}],
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="")
Llama-3.1-Nemotron-70B-Instructアポイントメール作成結果はこちら
以下は、取引先に対してアポイントメント(面会、ミーティング、会議などの約束)のためのメールのサンプルです。必要に応じて内容を調整してください。
---
件名: 【アポイントメントのお願い】[otreameeの名前/会社名]様との[面会/ミーティング/会議]のご予約
[取引先の名前]様
[取引先の会社名]
[あなたの名前]
[あなたの会社名]
[あなたの連絡先(電話番号、メールアドレス)]
お世話になっております。
[あなたの名前]です。
先日は[前回のやり取り、あるいは取引内容]に関しまして、ご多忙のところ大変お世話になりました。現在、[プロジェクト/提案/ディスカッション]の進捗にあたり、[otreameeの名前]様のご貴重なお時間をいただき、直接お話しづきに進めたいと思っております。
以下の日時で、アポイントメントのご予約をご確認いただけないでしょうか。ご都合の良い日時が異なる場合は、お気軽にご連絡いただけますと幸いです。
### アポイントメントの詳細
- **日時**:
1. **第一希望**:[年]年[月]月[日]([曜日])[時間]~[時間]
2. **第二希望**:[年]年[月]月[日]([曜日])[時間]~[時間]
- **場所**:[あなたの会社/取引先の会社/中間地点など、具体的な場所]
- または、オンラインミーティング([使用ツール、例:Zoom、Google Meetなど])も可能です。ご希望に応じてご案内致します。
- **目的**:[プロジェクト/提案/ディスカッション]に関する詳細なディスカッション
- **予定時間**:約[時間]時間
ご都合の確認および、ご希望の日時・場所等がございましたら、[あなたのメールアドレス]または[あなたの電話番号]までお知らせいただければ幸いです。早めのご連絡をお待ちしております。
今後ともどうぞよろしくお願い申し上げます。
[敬具]
[あなたの名前]
[あなたの役職]
[あなたの会社名]
[あなたの連絡先(電話番号、メールアドレス)]
---
**注意点:**
- **具体性**: 日時、場所、目的を具体的に記載する。
- **柔軟性**: 複数の日時オプションを提示することで、取引先のスケジュールに合わせやすくする。
- **連絡先の明示**: 迅速なご連絡が取れるよう、電話番号とメールアドレスを明記する。
- **丁寧な表現**: 丁寧な言葉遣いと礼儀を忘れない。
Llama-3.1-Nemotron-70B-Instruct欠勤メール作成の結果はこちら
以下がリライトされた欠勤メールの文章です。
**件名:お休みのお願いおよび業務の代行のお願い**
お世話になっております。
先日のお礼を兼ねた飲み会の影響で、現在二日酔いの症状が強く、朝から頭痛がひどくお休みをいただきたく存じます。
本日予定していた業務について、ご代行いただけないでしょうか。
また、明日については体調が回復した場合、出勤いたします。
ご不便おかけしますことをお詫び申し上げます。
**敬具**
【電子署名】
* **名前**:【ご自身の名前】
* **所属**:【ご自身の所属部署・会社】
* **連絡先**:【ご自身の連絡先(メールアドレス、電話番号など)】
GPT-4oアポイントメール作成結果はこちら
以下は、取引先に送るアポイントメントのメールのサンプルです。ご参考ください。
件名: 【○○株式会社】面談のご依頼
○○株式会社
(担当者名)様
いつも大変お世話になっております。△△株式会社の(あなたの名前)です。
貴社の製品/サービスについて、弊社と貴社の今後の協業に関してお話をさせていただきたく、ご都合のよろしい日時でアポイントメントをお願いできればと存じます。
つきましては、以下の日程にて面談の候補日をご提案させていただきます。
【面談候補日】
○月○日(○曜日)○時~○時
○月○日(○曜日)○時~○時
○月○日(○曜日)○時~○時
上記日程の中でご都合がつかない場合は、他の日程もご調整可能ですので、ご希望をお知らせください。
また、面談はオンライン(Zoom/Teamsなど)での実施も可能ですので、その旨もご希望があればご連絡ください。
お忙しいところ恐れ入りますが、何卒よろしくお願い申し上げます。
敬具
△△株式会社
(あなたの名前)
電話番号: xxx-xxxx-xxxx
メールアドレス: xxx@xxxx.com
GPT-4o欠勤メール作成の結果はこちら
件名: 【欠勤のご連絡】
○○(上司の名前)様
お疲れ様です。○○(あなたの名前)です。
昨日の飲み会の影響で、今朝から体調不良が続いており、頭痛がひどいため、本日はお休みをいただきたく存じます。大変恐縮ではございますが、本日の私の担当業務につきましては、対応いただけますと幸いです。
また、明日には体調が回復する予定ですが、状況次第でご連絡させていただきます。
お忙しいところ申し訳ございませんが、どうぞよろしくお願い申し上げます。
敬具
○○(あなたの名前)
△△株式会社
電話番号: xxx-xxxx-xxxx
メールアドレス: xxx@xxxx.com
Claude 3.5 Sonnetアポイントメール作成結果はこちら
件名: ミーティングのお願い
○○株式会社
△△部
□□様
いつもお世話になっております。
○○株式会社の××でございます。
突然のご連絡で恐縮ですが、下記の件についてお打ち合わせをさせていただきたく、ご連絡いたしました。
【議題】
・今後の取引について
・新規プロジェクトの提案
つきましては、以下の日程でお時間をいただけますでしょうか。
第一候補:○月○日(○) 14:00~15:00
第二候補:○月○日(○) 10:00~11:00
第三候補:○月○日(○) 16:00~17:00
ご都合のよろしい日時をお知らせいただけますと幸いです。
また、オンラインミーティングでも構いませんので、ご希望がございましたらお申し付けください。
ご多忙中誠に恐れ入りますが、ご検討のほどよろしくお願い申し上げます。
━━━━━━━━━━━━━━━━━━━━━━━━
○○株式会社
××部 ××
TEL: 03-XXXX-XXXX
Email: xxxx@xxxx.co.jp
━━━━━━━━━━━━━━━━━━━━━━━━
Claude 3.5 Sonnet欠勤メール作成の結果はこちら
件名: 本日の欠勤のご連絡
拝啓 ○○部長
いつもお世話になっております。
△△部の□□でございます。
誠に恐れ入りますが、体調不良のため、本日は欠勤させていただきたくご連絡申し上げます。
大変申し訳ございませんが、本日予定しておりました業務につきましては、代理の方にお願いできますと幸いです。
なお、明日の出社につきましては、体調の回復状況を見て判断させていただき、改めてご連絡させていただきます。
ご迷惑をおかけして誠に申し訳ございません。
何卒よろしくお願い申し上げます。
敬具
━━━━━━━━━━━━━━━━━━━━━━━━
○○株式会社
△△部 □□ ××
TEL: 03-XXXX-XXXX
Email: xxxx@xxxx.co.jp
━━━━━━━━━━━━━━━━━━━━━━━━
比較検証した結果は以下の動画です。
出力された結果を見てみると、アポイントメール作成についてはLlama3.1が詳細で丁寧という印象を受けましたが、欠勤メールではClaude 3.5 Sonnetが適切かなという印象です。
Claude 3.5 Sonnetだけ、二日酔い感を出していないので、メールを送る際にはこの文面が適切かと思います
なお、次世代動画トラッキングAICoTracker3について詳しく知りたい方は、下記の記事を合わせてご確認ください。
まとめ
本記事では、NVIDIAの新しいLLMモデル「Llama-3.1-Nemotron-70B-Instruct」について紹介しました。
このモデルは、ベンチマーク結果でも従来のLLMより優れており、高い汎用性を持つことがわかりました。特に、ユーザーからのフィードバックを基に応答を最適化する技術や、NVIDIAの推論最適化ソリューションにより、高速かつ効率的な推論が可能です。
今後は、コーディングを含めたさらなる検証を通じて、Llama-3.1-Nemotron-70B-Instructの性能を深く探っていく予定です。ぜひ、この記事を参考にして活用してみてください!
最後に
いかがだったでしょうか?
生成AIを活用し、ビジネスを次のステージへ進めましょう。具体的な活用事例や最適な導入方法について、ぜひご相談ください。
株式会社WEELは、自社・業務特化の効果が出るAIプロダクト開発が強みです!
開発実績として、
・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、大規模言語モデル(LLM)を対象に、言語理解能力、生成能力、応答速度の各側面について比較・検証した資料も配布しております。この機会にぜひご活用ください。