こんにちは、スクーティー代表のかけやと申します。
弊社は生成AIを強みとするベトナムオフショア開発・ラボ型開発や、生成AIコンサルティングなどのサービスを提供しており、最近はありがたいことに生成AIと連携したシステム開発のご依頼を数多く頂いています。
米国時間2024年12月6日にMeta社がステルス的に?Llama 3.3をリリースしました。OpenAI社のo1 / o1 promote の発表の裏で、しれっと発表されていました。危うく見逃すところでした・・・あまり公開されているドキュメントも多くなく情報を集めるのが大変でしたが、弊社はLlamaを使用してオンプレミス環境上にRAGを構築するサービスも提供しているため、一生懸命情報を集めました。
この記事では、Llama 3.3の性能、Llama 3.1/3.2との比較、他社モデルとの比較、特徴、ライセンス、安全性、倫理的な考慮事項まで、網羅的に解説します。さらに、Transformersやllamaコードベースでの使用方法、そしてGroqやHugging Faceといったプラットフォームでの活用事例も紹介します。
Llama 3.3 モデルの概要
Llama 3.3の基本情報
Metaが開発したLlama 3.3は、70Bパラメータの命令調整済み多言語大規模言語モデル(LLM)です。テキスト入力とテキスト出力に特化しており、多言語での対話に最適化されている点が特徴です。
多くのオープンソースおよびクローズドなチャットモデルと比較して、一般的な業界ベンチマークにおいて優れたパフォーマンスを示します。これは、Metaが長年培ってきたLLM技術の集大成と言えるでしょう。Llama 3.3は命令調整済みモデルとしてのみ提供され、事前学習済みバージョンは利用できません。つまり、すぐに利用できる状態になっているということです。
アーキテクチャは最適化されたTransformerアーキテクチャを採用し、教師あり微調整(SFT)と人間のフィードバックによる強化学習(RLHF)を用いて、有用性と安全性の面で人間の好みに合わせています。これは、より自然で人間らしいテキスト生成を可能にするための工夫です。
さらに、128kトークンという長いコンテキストウィンドウを備えています。これはGPT-4oと同等であり、約400ページ分の書籍テキストに相当します。これにより、長文の生成や要約、そして複雑な質問への回答などが可能になります。
Llama 3.3の利点:パフォーマンス向上と低コスト
Llama 3.3 70Bは、Llama 3.1 70Bと比較して、推論、数学、知識、指示追従、ツール使用など、幅広いタスクでパフォーマンスが向上しています。テキストのみのアプリケーションではLlama 3.2 90Bよりも優れたパフォーマンスを発揮し、驚くべきことに、一部のアプリケーションでは、Llama 3.3 70BはLlama 3.1 405Bのパフォーマンスに匹敵します。
70BパラメータのLlama 3.3は、405BパラメータのLlama 3.1に匹敵する性能を、より少ない計算リソースで実現しているため、計算コストと環境負荷を大幅に削減できます。これは、費用対効果を重視する開発者にとって非常に魅力的な点です。推論コストは100万トークンあたりわずか0.01ドルと、GPT-4やClaude 3.5といった競合モデルと比較しても非常に安価です。
Llama 3.1については、以下の記事に詳細を記載していますので、ぜひご覧ください。
関連記事:Metaが最新言語モデルLlama 3.1を発表!脅威のGPT-4o超え!?
Llama 3.3とLlama 3.2との比較、他社モデルとの比較、効果的な用途
Llama 3.3は、Llama 3.2と比較して、特にテキストベースのタスクにおいて大幅な性能向上を実現しています。Llama 3.2は、エッジデバイスへのデプロイに適した軽量モデル(1Bおよび3Bパラメータ)や、マルチモーダルモデル(11B Visionおよび90B Vision)を提供することに重点を置いていましたが、Llama 3.3は70Bパラメータに絞り込み、テキスト生成の品質向上に特化しています。
関連記事:Llama 3.2 の概要:マルチモーダル/オンデバイス対応モデル
他社モデルとの比較では、AmazonのNova Proモデルと同程度のパフォーマンスを持つことが示されています。多言語対応の対話、推論、その他の高度な自然言語処理タスクにおいて優れた結果を出していますが、HumanEvalコーディングタスクではNova Proが上回っています。
Llama 3.3は、その高い性能と多言語対応能力から、チャットボット、アシスタント、コンテンツ生成、翻訳、コーディング支援など、様々な用途で効果を発揮します。特に、長文の処理が必要なタスクや、多言語を扱うタスクにおいて、その真価を発揮するでしょう。
Llama 3.3の命令調整済みモデルのベンチマーク結果
Llama 3.3の性能は、様々なベンチマークで評価されています。
先程述べたように、Llama 3.3はパラメータ数が70BでもLlama 3.1の405Bに匹敵するベンチマーク結果を示しています。
上記はLlamaのバージョン比較ですが、全体としてはLlama 3.3はLlama 3.1の70Bと405Bの間くらいというイメージですが、IFEval(「指示追従性(Instruction-Following)」を適切に発揮できているかを評価するベンチマークで、「指示追従性」とは、与えられた指示・命令・問いかけに対して、モデルがそれを理解し、期待される形で応答できるか、あるいは方針を守って返答できるかといった能力)やMATH (CoT)(数学的推論能力を評価するための難易度の高い問題集(データセット)で、主に中学・高校レベルの数学問題が含まれています)など、いくつかの評価項目でLlama 3.3はLlama 3.1の405Bを上回る結果を示しています。
Llama 3.3 の性能以外の情報
サポート言語
Llama 3.3は多言語対応で、英語、ドイツ語、フランス語、イタリア語、ポルトガル語、ヒンディー語、スペイン語、タイ語を公式にサポートしています。加えて、トレーニングデータにはこれら以外にも多くの言語が含まれているため、潜在的にはより多くの言語を扱う可能性を秘めています。相変わらず日本語の公式サポートはなし・・・なんで!?
データの概要と鮮度
Llama 3.3の事前学習には、公開されている様々なソースから収集された約15兆トークンのデータが使用されました。これは、インターネット上のテキストデータの大部分を網羅していると言えるでしょう。微調整データには、公開されている命令データセットに加えて、2,500万を超える合成的に生成されたサンプルが含まれています。これらのデータにより、Llama 3.3は人間のような自然なテキスト生成能力を獲得しています。事前学習データのカットオフは2023年12月です。これは、モデルが比較的最近の情報に基づいてトレーニングされていることを示しています。
ライセンスと利用規約
Llama 3.3は、カスタム商用ライセンスであるLlama 3.3コミュニティライセンス契約に基づいて提供されています。このライセンスは、商用利用と研究利用の両方を許可しており、モデルの変更や派生物の作成も可能です。ライセンスの全文は、こちら で確認できます。
適用される法律や規制(貿易コンプライアンス法を含む)に違反する使用、許容される使用ポリシーおよびLlama 3.3コミュニティライセンスで禁止されているその他の使用、このモデルカードで明示的にサポートされているとされている以外の言語での使用は、認められていません。
しかし、Llama 3.3は、公式にサポートされている8つの言語よりも幅広い言語でトレーニングされています。開発者は、Llama 3.3コミュニティライセンスと許容使用ポリシーを遵守する限り、公式サポート言語以外の言語向けにLlama 3.3モデルを微調整できます。その場合、追加の言語でLlama 3.3を安全かつ責任ある方法で使用することの責任は開発者が負います。
Llama 3.3 の使用方法
本章では主に以下のページを参考にしています。
プロンプトテンプレートとツール呼び出し機能
Llama 3.3はLlama 3.1と同じプロンプト形式を使用します。そのため、Llama 3.1用に作成されたプロンプトは、Llama 3.3で変更なしで動作します。これは、Llama 3.1から移行するユーザーにとって大きな利点です。Llama 3.3はLlama 3.1と同じコードインタープリターおよびツール呼び出し機能をサポートしています。これらの機能を使用することで、モデルに外部ツールや情報を活用させることが可能になります。詳細な使用方法については、Llama 3.1のドキュメントページを参照してください。
Transformersでの使用
transformers >= 4.43.0
以降では、Transformersのpipeline
抽象化を使用するか、generate()
関数でAutoクラスを活用して、会話型推論を実行できます。 transformersのインストールまたはアップグレードは、pip install --upgrade transformers
で行います。
# transformersとtorchをインポートします
import transformers
import torch
# モデルIDを指定します
model_id = "meta-llama/Llama-3.3-70B-Instruct"
# テキスト生成パイプラインを作成します
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device_map="auto",
)
# チャットボットへの指示とユーザーからの質問を定義します
messages = [
{"role": "system", "content": "あなたは海賊口調で返答するチャットボットです!"},
{"role": "user", "content": "あなたは誰ですか?"},
]
# テキストを生成します
outputs = pipeline(
messages,
max_new_tokens=256,
)
# 生成されたテキストを出力します
print(outputs[0]["generated_text"][-1])
出典:https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct
上記は、Transformersを使ってLlama 3.3でテキスト生成を行うPythonのコード例です。この例では、海賊のような話し方をするチャットボットを実装しています。model_idでモデルを指定し、pipelineでテキスト生成パイプラインを作成します。messagesには、チャットボットへの指示とユーザーからの質問が含まれています。generate()関数でテキストを生成し、結果を出力します。ツール呼び出しは、こちらのHugging FaceのページにあるTransformersのチャットテンプレートを通じてサポートされています。
bitsandbytes を使用したメモリ最適化
bitsandbytesライブラリとtransformersライブラリを組み合わせることで、モデルチェックポイントを8ビットまたは4ビット精度でロードし、メモリ使用量を最適化できます。これにより、より少ないメモリ容量のマシンでもLlama 3.3を実行することが可能になります。
# torchとtransformersの必要なコンポーネントをインポートします
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from bitsandbytes import BitsAndBytesConfig
# モデルIDを指定します
model_id = "meta-llama/Llama-3.3-70B-Instruct"
# 8ビット量子化の設定を行います
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
# 量子化されたモデルをロードします
quantized_model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="auto", torch_dtype=torch.bfloat16, quantization_config=quantization_config)
# トークナイザーをロードします
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 入力テキストを定義します
input_text = "今日の夕食は何ですか?"
# 入力テキストをトークン化します
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
# テキストを生成します
output = quantized_model.generate(**input_ids, max_new_tokens=10)
# 生成されたテキストを出力します
print(tokenizer.decode(output[0], skip_special_tokens=True))
出典:https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct
4ビット精度でロードするには、BitsAndBytesConfigにload_in_4bit=Trueを指定します。上記は、bitsandbytesを使ってLlama 3.3を8ビット精度でロードし、テキスト生成を行うコード例です。quantization_configで量子化設定を指定し、from_pretrained関数でモデルをロードします。tokenizerでテキストをトークン化し、generate()関数でテキストを生成、結果を出力します。
Llamaコードベースでの使用
LlamaのオリジナルコードベースでLlama 3.3を使用する場合は、Llamaのレポジトリの手順に従ってください。オリジナルのチェックポイントをダウンロードするには、以下のコマンド例のようにhuggingface-cliを活用できます。
# huggingface-cliを使って、Llama-3.3-70B-Instructのオリジナルチェックポイントをダウンロードします。
huggingface-cli download meta-llama/Llama-3.3-70B-Instruct --include "original/*" --local-dir Llama-3.3-70B-Instruct
出典:https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct
このコマンドは、Hugging FaceからLlama 3.3のオリジナルチェックポイントをダウンロードし、指定したローカルディレクトリに保存します。 --include "original/*"
オプションは、オリジナルのチェックポイントファイルのみをダウンロードするように指定しています。
Llama 3.3 のハードウェアとソフトウェア
トレーニングにおける計算リソースとエネルギー使用量
Llama 3.3の事前学習には、Metaが独自に開発したトレーニングライブラリ、カスタムビルドのGPUクラスタ、そして本番環境のインフラストラクチャが使用されました。微調整、アノテーション、そして評価も同様の本番環境インフラストラクチャで実施されています。トレーニングには、H100-80GB(TDP 700W)タイプのハードウェアで、累積39.3M GPU時間、つまり700万GPU時間が費やされています。これは、膨大な計算リソースとエネルギーが必要となるLLMトレーニングの規模を示しています。
温室効果ガス排出量と環境への配慮
トレーニングにおける推定総設置ベース温室効果ガス排出量は11,390トンCO2eqでした。 しかし、Metaは2020年からグローバルな事業で温室効果ガス排出量を実質ゼロに維持し、電力使用量の100%を再生可能エネルギーで賄っているため、トレーニングの総市場ベース温室効果ガス排出量は0トンCO2eqでした。これは、環境に配慮したAI開発の取り組みを示す重要な指標と言えるでしょう。
トレーニングのエネルギー使用量と温室効果ガス排出量を決定するために使用された方法論は、こちらの論文で公開されています。Metaはこれらのモデルをオープンにリリースしているため、トレーニングで発生したエネルギー使用量と温室効果ガス排出量は、他のユーザーが負担する必要はありません。
Llama 3.3 の責任と安全性
責任あるデプロイ
Metaは、Llama 3.3の責任あるデプロイのために、信頼と安全に関するリスク管理に多大な努力を払っています。具体的には、以下の3つの戦略を掲げています。
(1)開発者がターゲットオーディエンスおよびLlamaがサポートするユースケースのために、役立つ、安全で、かつ柔軟なエクスペリエンスを構築しデプロイできるようにすること。
(2)Llamaの機能を悪用しようとする悪意のあるユーザーから開発者とコミュニティを保護すること。
(3)モデルの誤用を防ぐための保護策をコミュニティに提供すること。
Llamaは様々なユースケースで使用できる基盤技術であり、MetaはコミュニティストーリーのWebページで、Llamaモデルの責任あるデプロイ事例を紹介しています。Metaのアプローチは、一般的なユースケースにおけるモデルの安全性を向上させ、標準的な有害事象に対処することで、世界中の人々がテクノロジーの恩恵を安全に享受できるよう、最も役立つモデルを構築することです。
開発者は、それぞれのユースケースに合わせて独自のポリシーを定義し、Llamaシステムに必要な安全対策を講じてモデルをデプロイすることで、安全性と責任ある利用を担保する必要があります。責任ある使用ガイドには、責任あるAI開発のためのベストプラクティスがまとめられています。Llama 3.3は、このガイドラインに基づいて開発されました。
安全性に関する微調整
安全性の確保は、LLM開発において最優先事項です。Llama 3.3では、安全性に関する微調整に特に力を入れており、安全なAIシステムの開発とデプロイを容易にすることを目指しています。微調整には、Metaのベンダーから提供された人間が生成したデータと、安全リスクを軽減するための合成データが使用されています。
LLMベースの分類器を開発することで、高品質なプロンプトとレスポンスを選択し、データ品質管理を強化しています。Llama 3での取り組みを基に、良性のプロンプトに対するモデルの拒否と拒否のトーンに重点を置いています。境界線上のプロンプトと敵対的なプロンプトの両方を安全データ戦略に含め、トーンガイドラインに沿って安全データ応答を修正しました。
Llama 3.3 システムと保護策
Llama 3.3をはじめとする大規模言語モデルは、単体でデプロイするのではなく、必要に応じて追加の安全対策を備えた包括的なAIシステムの一部としてデプロイされるべきです。開発者は、エージェントシステムを構築する際に、システムレベルの安全対策を実装する責任があります。
適切な有用性と安全性のバランスを維持し、システムやモデルと外部ツールとの統合に内在するリスクを軽減するために、安全対策が不可欠です。Metaは責任あるリリースの一環として、Llama Guard 3、Prompt Guard、Code Shieldといった安全対策ツールをコミュニティに提供しています。これらのツールは、Llamaモデルや他のLLMと共に使用することで、安全性を高めることができます。Metaが提供する参照実装のデモには、これらの安全対策がデフォルトで組み込まれており、開発者はすぐにシステムレベルの安全性を活用できます。
機能固有の考慮事項
Llama 3.3の新機能を活用する際には、いくつかの考慮事項があります。
まず、ツール使用に関して、開発者はLLMと選択したツールやサービスとの統合に責任を負います。ユースケースに合わせた明確なポリシーを定義し、使用するサードパーティサービスの信頼性を評価し、ツール使用に伴う安全性とセキュリティの制限を認識しておく必要があります。サードパーティの安全対策を安全にデプロイするためのベストプラクティスは、責任ある使用ガイドに記載されています。
次に、多言語性に関して、Llama 3.3は英語に加えて、フランス語、ドイツ語、ヒンディー語、イタリア語、ポルトガル語、スペイン語、タイ語の7言語をサポートしています。Llamaは、安全性と有用性の基準を満たす言語以外でもテキストを出力できる可能性がありますが、Metaは、微調整とシステム制御をポリシーおよび責任ある使用ガイドのベストプラクティスに合わせて実装することなく、サポートされていない言語で会話するためにこのモデルを使用することを強く推奨していません。
評価とレッドチーミング
Llama 3.3の安全性と信頼性を確保するため、Metaは広範な評価とレッドチーミングを実施しています。レッドチーミングとは、セキュリティの分野で用いられる、システムや組織の脆弱性を発見するための演習のことです。
一般的なユースケースと特定の機能について評価を行い、チャットボット、コーディングアシスタント、ツール呼び出しといった一般的なアプリケーションにおけるシステムの安全リスクを測定しています。専用の敵対的評価データセットを作成し、LlamaモデルとLlama Guard 3を組み合わせたシステムの評価を通じて、入力プロンプトと出力レスポンスのフィルタリングを行いました。
Metaは、各ユースケースに特化した評価データセットの作成を推奨しています。また、Prompt GuardやCode Shieldといったツールも、アプリケーションに応じて利用可能です。機能評価では、長いコンテキスト、多言語、ツール呼び出し、コーディング、記憶といった特定の機能に固有の脆弱性を測定しました。これにより、モデルの潜在的なリスクを特定し、対策を講じることが可能になります。
リスク発見を目的としたレッドチーミング演習も定期的に実施されており、その結果をベンチマークと安全調整データセットの改善に役立てています。サイバーセキュリティ、敵対的機械学習、責任あるAI、整合性の専門家で構成されるレッドチームは、悪意のあるユーザーによるモデルの悪用を防ぐための対策を検討しています。多言語コンテンツの専門家もチームに加わり、特定の地域市場における整合性問題にも対応しています。
Llama 3.3の重要なリスク領域への対策
Metaは、Llama 3.3の開発において、以下の3つの重要なリスク領域に焦点を当て、軽減のための対策を講じています。
CBRNE(化学、生物、放射線、核、爆発物)関連情報の出力: 化学兵器や生物兵器の拡散防止のため、Llama 3.3が悪用されるリスクを評価するため、専門家チームによるアップリフトテストを実施しました。このテストは、Llama 3.3が兵器を使った攻撃の計画や実行に悪用される可能性を分析し、そのリスクを軽減するための対策を講じることを目的としています。
子供の安全: 子供の安全を脅かすような出力の生成を防ぐため、専門家チームがリスク評価を実施し、モデルの微調整を行いました。Llama 3の開発過程では、客観的な方法論を用いた詳細なセッションを通じて、複数の攻撃ベクトルに沿ったモデルリスクの評価が行われました。評価対象には、Llama 3が学習した追加の言語も含まれています。さらに、コンテンツ専門家との協力により、市場特有のニュアンスや経験を考慮したレッドチーミング演習を実施し、問題のあるコンテンツの生成リスクを軽減するための対策を講じています。
サイバー攻撃の支援: サイバー攻撃に悪用されるリスクを評価するため、2種類の調査を実施しました。1つ目は、Llama 3ファミリーのLLMがハッキングタスクにおける人間の能力(スキルレベルと速度の両方)を向上させるかどうかを調査するサイバー攻撃アップリフトスタディです。2つ目は、ランサムウェア攻撃の文脈において、LLMを自律型エージェントとしてサイバー攻撃作戦に使用した場合の能力を評価することに焦点を当てた攻撃自動化スタディです。この評価は、LLMをインタラクティブアシスタントと見なした以前のスタディとは異なり、人間の介入なしに複雑なサイバー攻撃を実行する独立したエージェントとして、これらのモデルが効果的に機能するかどうかを評価することを主な目的としています。
Llama 3.3 のコミュニティへの貢献
オープンソースコミュニティとの連携
Metaは、生成AIの安全性向上には専門知識とツールだけでなく、オープンコミュニティの協力が不可欠だと考えています。AI Alliance、Partnership on AI、MLCommonsといったオープンコンソーシアムに積極的に参加し、安全性の標準化と透明性向上に貢献しています。
また、MLCommons Proof of Concept評価などの分類法の採用を推奨し、安全性とコンテンツ評価に関する共同作業と情報共有を促進しています。Purple Llamaツールはオープンソース化され、コミュニティ全体で利用可能となっています。クラウドサービスプロバイダーを含むエコシステムパートナーにも広く配布されており、GitHubリポジトリへのコミュニティからの貢献を歓迎しています。
Llama Impact Grantsプログラム
Llama Impact Grantsプログラムは、教育、気候変動対策、オープンイノベーションの3つの分野において、Llamaモデルの社会貢献に繋がる応用事例を支援するために設立されました。数百件の応募の中から選出された20名のファイナリストは、こちらのページでで紹介されています。
フィードバックとバグ報奨金プログラム
Metaは、出力報告メカニズムとバグ報奨金プログラムを提供することで、コミュニティからのフィードバックを収集し、Llama技術の継続的な改善に努めています。これらのプログラムは、モデルの安全性と信頼性を向上させるための重要な役割を果たしています。
Llama 3.3 の倫理的考慮事項と制限
倫理的な価値観と設計理念
Llama 3.3は、開放性、包括性、有用性という中核的な価値観に基づいて設計されています。あらゆる人々にサービスを提供し、幅広いユースケースに対応することを目指しており、多様な背景、経験、視点を持つ人々がアクセスできるよう配慮されています。ユーザーの尊厳と自律性を尊重し、表現の自由と革新を促進するという理念のもと、ユーザーのニーズに寄り添うことを目指しています。問題のあるコンテンツであっても、文脈によっては価値ある目的を果たす場合もあるという理解に基づき、不必要な判断や規範性を排除しています。
潜在的なリスクと安全性のテストの重要性
Llama 3.3は最先端の技術ですが、他の技術と同様に、使用に伴うリスクが存在します。これまでのテストではすべてのシナリオを網羅することは不可能であり、予期せぬ出力や、不正確、偏った、あるいは好ましくない応答が生成される可能性があります。すべてのLLMと同様に、Llama 3.3の出力は事前に完全に予測することはできません。そのため、開発者はLlama 3.3をアプリケーションに実装する前に、具体的な用途に合わせた安全性テストとチューニングを実施する必要があります。責任ある開発のためのリソースとして、責任ある使用ガイド、信頼と安全に関するソリューション、そしてその他のリソースが提供されています。これらのリソースを活用することで、責任あるAI開発に関する理解を深めることができます。