2024年7月23日、Metaがオープンソースの大規模言語モデル「Llama 3.1」シリーズをリリースした。
中でも「Llama 3.1 405B」は、GPT-4oやClaude 3.5 Sonnetなど、OpenAIやAnthropicなどの他社が商用・非公開で開発している主要な最上位モデルたちと、肩を並べる性能を示すとされる。
オープンソースのLLMの中では、世界最大かつ最も高性能なLLMと言っていい。
本記事では、そんな登場したばかりのLlama 3.1モデルシリーズを、実際に試す方法を紹介する。
小型軽量な70Bと8Bモデルについては、超高速なAI専用クラウドコンピューティング「Groq Cloud」で無料で利用できる。
405Bモデルは、まだ試すことのできる場が非常に少ないが、格安のGPUインスタンスをレンタルして動かす方法を紹介する。
本記事を参考に、オープンソースモデルが商用モデルに追いついた歴史的瞬間を、ぜひ体験してほしい。
GPT-4oもClaude 3.5 Sonnetも超えたLlama 3.1の実力
Llama3.1には、パラメータ数に3種のバリエーションがあり、より大型で高性能である順に、405B、70B、8Bの3つのモデルで構成される。
Llama 3.1 405Bモデルは、4050億パラメータを持つ超大型モデルだ。
Metaが公開しているベンチマーク結果は以下の通りだ。かなり多くの指標で、GPT-4oやClaude 3.5 Sonnetを超えるスコアを叩き出していることがわかる。
Category Benchmark | Llama 3.1 405B | GPT-4o | Claude 3.5 Sonnet |
---|---|---|---|
MMLU (0-shot, CoT) | 88.6 | 88.7 | 88.3 |
MMLU PRO (5-shot, CoT) | 73.3 | 74.0 | 77.0 |
IFEval | 88.6 | 85.6 | 88.0 |
HumanEval (0-shot) | 89.0 | 90.2 | 92.0 |
MBPP EvalPlus (base) (0-shot) | 88.6 | 87.8 | 90.5 |
GSM8K (8-shot, CoT) | 96.8 | 96.1 | 96.4 (0-shot) |
MATH (0-shot, CoT) | 73.8 | 76.6 | 71.1 |
ARC Challenge (0-shot) | 96.9 | 96.7 | 96.7 |
GPQA (0-shot, CoT) | 51.1 | 53.6 | 59.4 |
BFCL | 88.5 | 80.5 | 90.2 |
Nexus | 58.7 | 56.1 | 45.7 |
ZeroSCROLLS/QuALITY | 95.2 | 90.5 | 90.5 |
InfiniteBench/En.MC | 83.4 | 82.5 | – |
NIH/Multi-needle | 98.1 | 100.0 | 90.8 |
Multilingual MGSM (0-shot) | 91.6 | 90.5 | 91.6 |
70B、8Bモデルは「Llama 3」として既にリリースされていたもので、本サイトでも以前紹介した。
「Llama 3.1」で70B、8Bモデルがアップデートされ、405Bと同様に128,000トークンのコンテキストウィンドウと多言語サポートなどが強化された。
そして、以前からトレーニング中とされていた「405B」モデルが、Llama 3.1シリーズとしてついにリリースされたことで、商用モデルに匹敵する性能を持つオープンモデルに、誰でも無料でアクセスできる時代が到来した。
Llama 3.1モデルシリーズを使う2つの方法
Llama 3.1 405Bがそんなにすごいなら、今すぐ試してみたい…!と思う人も多いはず。
しかし、個人が気軽に405Bをいじることのできる手段は、今のところほとんどない。
本記事では、405Bモデルを今すぐ試すための数少ない方法を含め、Llama 3.1 405B, 70B, 8Bモデルを実際に試したい人のための選択肢を紹介する。
超高速AIクラウドGroqでLlama 3.1 8B / 70Bを無料で試す
Llama 3.1シリーズのうち、700億パラメータの「Llama 3.1 70B」は中型、80億パラメータの「Llama 3.1 8B」は小型モデルと位置付けることができる。
「Llama 3.1 8B」は、過去記事でも紹介した通りM3チップを搭載したMac Book Airなどでも十分実用的なスピードで動作する軽量なモデルだ。
一方、「Llama 3.1 70B」になってくると、高性能なGPUがなければ、ローカル環境で動かすのは処理速度が遅すぎてかなり厳しい。
70Bのような中型モデルを動かすときには、Groq Cloudなど大規模言語モデルのAIに特化した高速なクラウドサービスを使うことをお勧めする。
Groqは、AI推論に特化した新しいチップアーキテクチャを開発したスタートアップ企業である。
同社が開発したLanguage Processing Unit (LPU)は、従来のCPUやGPUとは異なり、Llama 3.1のような自然言語処理タスクに最適化された専用プロセッサだ。
前バージョンの「Llama 3」シリーズの時にも紹介したが、Groqのチャットサービスは、無料でLlamaモデルとの超高速なチャットが体験できる素晴らしいサービスだ。
Groqのトップページにアクセスすると、いきなりチャットウィンドウが表示される。
Groqのブラウザ上で様々なAIモデルとのチャットをテストする場合、なんと利用料金は無料だ。
ただし、利用には会員登録が必要なので、まずはメールアドレスを登録しよう。
メールアドレスを登録したら、Groqのトップページの右上に、回答を生成するAIモデルを選択するためのプルダウンメニューがある。
7月23日にリリースされたばかりのLlama 3.1 70Bモデルも、Llama 3.1 8Bモデルも、ここにラインナップされている。
実際に、「Llama 3.1 70B」モデルを選択して、「オープンソースとはどういう意味ですか?」という質問を投げかけてみた。
すると、1秒間に250トークンという驚異的なスピードでLlama 3.1 70Bによる回答が生成された。
Llama 3.1 70Bモデル、Llama 3.1 8Bモデルの性能を試してみたい場合には、Groqを使用するのが最も手軽で簡単だ。
ただし、残念ながら記事執筆現在(2024年7月27日)は、GroqはLlama 3.1 405Bモデルには対応していないので、405Bモデルを体験することはできない。
Vast.aiでGPUをレンタルしてLlama 3.1 405Bを動かす
超大型の「Llama 3.1 405B」は、ChatGPTのGPT-4oなどフラグシップモデル並みの高性能を有するが、到底個人のPCで動かすことは不可能なサイズだ。
筆者が試してみたところ、1台30万円の高性能GPUであるRTX4090を8台積んだサーバーでも、「Llama 3.1 405B」はかなりゆっくりしたチャットになった。
非常に大型で、コンピュータリソースの消費が激しいため、まだ405Bモデルを一般公開しているサービスも少ない。
ここでは、個人からGPUを格安でレンタルできるサービスである「Vast.ai」と、オープンソースのLLMモデルをサーバーやデスクトップで簡単に動かすためのアプリである「Ollama」を使って、Llama 3 405BをGPUインスタンス上で動かす方法を紹介する。
Vast.aiの使い方
Vast.aiは、非常に安価にクラウドGPUをレンタルできるサービスだ。
個人から大型データセンターまで、GPUリソースが余っている人から、初心者でも簡単に、オンデマンドで短時間でもGPUマシンをレンタルすることができる。
まずは、トップページにアクセスして、「Console」画面を開く。
すると、早速レンタル可能なGPUインスタンスの一覧が表示されるが、右上の「SIGN IN」をクリックして、新規のアカウント作成(Sign Up)を行う。
以下では、Vast.aiに会員登録が済んでいるという前提で、具体的なレンタルの手順を含めて解説していく。
Vast.aiのインスタンスにOllamaを入れる下準備
最も手軽にGPUサーバー上でOllamaをインストールする方法は、Jupyterというブラウザ上で分かりやすく使えるインターフェースを使用することだ。
まずは、Vast.aiでレンタルするサーバーでJupyterを快適に動かすため、必要な下準備を行う。
Vast.aiの証明書をブラウザに追加しておくと、ホストに直接HTTPS接続してJupyterを使えるようになり便利なので設定しておく。
Vast.aiのヘルプを開き、「Start by downloading the certificate here」の「here」をクリックすることで「jvastai_root.car」という証明書をダウンロードできる。
Macの場合、ダウンロードした.carファイルをダブルクリックすると、キーチェーンに登録するかどうかを尋ねられるので、「ログイン」キーチェーンに登録する。
キーチェーンアプリを開いて、「ログイン」キーチェーンの中からVast.ai Jupyter CA
という証明書を見つけたら、オプションを開いて「信頼」をすべて「常に信頼」に切り替えておく。
なお、この作業を行った後、一度ブラウザを再起動しなければ、この変更が反映されない場合があるので注意しよう。
インスタンスの起動テンプレートを選択する
Vast.aiでは、レンタルしたGPUマシンを起動する前に、どのようなソフトをインストールした状態で起動するかを定める「テンプレート」を選択することができる。
Stable Diffusionなどの画像生成AIが最初から入ったテンプレートもあれば、機械学習に特化したテンプレートなどもある。
今回は、「Pytorch Default」という汎用的なテンプレートを用いる。
念のため、Pytorch Defaultのテンプレートの「EDIT」を開くと、最初から以下のように「Jupyter direct HTTPS」を使用するオプションにチェックが入っていると思われる。
先の証明書を有効化していれば、Jupyterが問題なく動作する。
GPUインスタンスを選択する
いよいよ、実際にレンタルするGPUインスタンスを選ぶ。
レンタルしている間常にかかる時間料金、ディスクスペースのサイズに応じたストレージ料金、ダウンロード・アップロードの容量に応じて従量課金されるネット料金がある。
一覧にGPUの種類や台数でフィルタをかけて、価格の安い順にソートするなどして、自分が望むスペックのGPUインスタンスを見つける。
また、インスタンスの「Rent」ボタンを押す前に、画面左側の「Instance Configuration」を確認しておく。
テンプレートは先ほど選んだ「Pytorch Default」になっている。
どれくらい大型のLLMを使用するかによって、ディスクスペースを選ぶ必要がある。Llama 3.1 405Bモデルの場合、231GBものスペースが必要になる。
ただ、初めてVast.aiを使用する場合には、ストレージ料金もかかってしまうので、まずは練習で8Bモデルを動かすことなどから始めた方がいい。初回はディスクスペースは16GBで十分だろう。
「Rent」ボタンを押したら、画面左側のメニューで「Instances」をクリックし、レンタル中のインスタンスの一覧を見ると、選んだGPUインスタンスの起動状況が閲覧できる。
レンタル直後は起動処理に若干時間がかかるが、以下のように「Open」ボタンが表示されたら、これをクリックするだけでJupyterが起動する。
Jupyterを使ってOllama & Llama 3.1をインストールする
Jupyterを開いたら、「File」メニューから「New」「Terminal」を選択し、新しいウィンドウでターミナルを開く。
このターミナルを使って、LLMモデルを簡単にダウンロード・実行できるツールである「Ollama」をインストールする。
Ollamaの公式サイトで、以下のようにLinux向けのインストールコマンドが紹介されているので、それをコピペして打ち込めばいいだけだ。
curl -fsSL https://ollama.com/install.sh | sh
コマンドを打ち込むと、Ollamaのインストールが始まる。
インストールが完了したら、今度はOllamaアプリをインスタンス上で起動する。
以下のコマンドをターミナルに打ち込むと、Ollamaが実行される。
ollama serve
これでOllamaが起動した状態になったが、このターミナルはOllamaが実行されっぱなしになり、これ以上なにもコマンド操作を受け付けてくれなくなる。
そこで、再びもう一つ新しいターミナルのウィンドウを開く。
(ちなみに、ollama serve &
と最後に&記号をつけると、ollamaがバックグラウンドで実行され、そのまま同じウィンドウで次のコマンドを続けることもできるが、説明をシンプルにするため新規のウィンドウで行う。)
新規のウィンドウでは、ollama経由でさまざまなAIモデルを呼び出せるようになっている。
ollama run
というコマンドの後に、llama3.1
など呼び出したいモデル名を打ち込むことで、このターミナル画面上でチャットを開始できる。
モデル名の一覧は、Ollamaのサイトに掲載されている。
例えば、Llama 3.1モデルシリーズで最も軽量な8Bパラメータのモデルを呼び出すコマンドは、ollama run llama3.1
だ。
まだダウンロードしたことのないモデル名を打ち込むと、自動的にダウンロードが始まり、ダウンロードが完了した後にチャットが可能になる。
以下では、「こんにちは」というメッセージを送ってみた。瞬時にLlama 3.1 8Bモデルから、回答が返ってくる。
Llama 3.1 405BモデルをGPUインスタンスで動かす
Llama 3.1シリーズの最も高性能な405Bパラメーターのモデルも、すでにOllamaに実装されているので、コマンドを入れることで実行できる。
ただし、Ollamaのページにある通り、「231ギガバイト」もの超大型モデルなので、ダウンロードに時間がかかる上に、Vast.aiでレンタルするインスタンスのディスクスペースが250GB程度は必要になる。
Vast.aiの使い方に十分になれたら、Llama 3.1 405Bの負荷に耐えられるよう、RTX 4090を8台積んだ超大型のインスタンスをレンタルして、ストレージの容量も250GB以上に設定してみよう。
1時間あたりの利用料金は、GPU1台のインスタンスと比べると跳ね上がるので、ある程度小型のインスタンスで練習してから行った方が良いだろう。
(それでも、1時間4〜5ドルと、格安の料金で利用することができるが。)
再び、先ほど紹介したように、Jupyterでターミナルを起動し、Ollamaのインストールと起動を終えておく。
Llama 3.1 の405Bパラメータモデルを入手・実行するためのコマンドは以下である。
ollama run llama3.1:405b
405Bモデルはダウンロードにもかなり時間がかかるので、レンタルするGPUインスタンスの、上り下りのインターネットスピードも重要だ。
下りインターネット速度が2000Mbpsを超えるサーバーで試してみたところ、10分程度でLlama 3.1 405Bモデルのダウンロードが完了した。
無事ダウンロードが終わると、ついに405Bモデルと対話することができる。
RTX4090を8台使っても、速度はかなりゆっくりだ。しかしながら、一つの会話のやり取りで1〜5分ほど待ちながら、使えなくはないスピードである。
もちろんChatGTPでGPT-4oを使ったり、Claude.aiでClaude 3.5 Sonnetを使ったりする方が、圧倒的に高速で楽だが、オープンソースモデルはある種のロマンを楽しめる。
Groq Cloudの高速なLPUでLlama 3.1 405Bモデルも使えるようになる日が楽しみだ。
Llama 3 405Bの性能を日本語で試してみる
せっかくなので、日本語のプロンプトで、Llama 3.1 405Bの性能がどの程度のものなのかを実験してみる。
過去にGPT-4oやClaude 3.5 Sonnetの比較などでも度々使っているプロンプトを試してみた。
倫理的ジレンマに関するプロンプト
まずは、いわゆるトロッコ問題のような、答えのない倫理的なジレンマを問うてみるプロンプトだ。
あなたは自動運転車の開発者です。テスト中、車が歩行者を検知しました。ブレーキをかけると、車内の乗客が死亡します。一方、ブレーキをかけないと、歩行者が死亡します。あなたならどうしますか?理由も含めて150字程度で説明してください。
このプロンプトに対するLlama 3.1 405Bの回答は以下だ。
自動運転車開発者としての立場から考えるのは難しいですが、基本的には人命を優先すべきです。このシナリオでは、どちらの選択も悲惨な結果となります。しかし、歩行者の安全が第一に考慮されるべきだと考えます。なぜなら、車内に乗っている人はその車を利用することである程度のリスクを承知しているのに対し、歩行者は道路を横断する権利があるからです。
テスト段階であっても、このような倫理的なジレンマに対して開発者として責任を持って対応する必要があります。事故防止システムを強化したり、車の安全性を高めたりといった対策も含めて、将来的にはこのような状況が発生しないように努力すべきです。
きちんとロジックの通った回答をしているように思える。
Llama 3 70Bモデルや、Llama 3 8Bモデルでは、かなり日本語力に不安があったが、Llama 3.1 405Bモデルでは、かなり自然な日本語が生成される。
GPT-4oやClaude 3.5 Sonnetと肩を並べるベンチマーク結果も納得だ。
言語理解と文脈把握に関するプロンプト
次に、わざと非常に分かりにくい代名詞を多用した文章を作って、それを解釈させる問題を出してみる。
過去に筆者が試してみた際には、GPT-4oや、Claude 3.5 Sonnetなど、名だたるフラグシップモデルたちも、なぜか間違えてしまう傾向にある文章問題だ。
文章:
彼女が彼に贈った本は、その著者が彼女の友人だったため特別だった。しかし、彼はそれを読まずに彼女の姉に渡してしまった。姉はそれを知って怒り、彼女に伝えようとしたが、彼女は既に彼と別れていた。
問題:
この文章の中に登場する「それ」は、それぞれ何を指していますか?
Llama 3.1 405Bの回答は以下だ。
文章中で「それ」という代名詞が2回出てくること、また何を指しているかの解釈は正解できており、これもまた405Bの性能と日本語力を証明するものだ。
しかし、下の方の文章は「それ」という代名詞が出てこない部分の解説まで行っており、ちょっとおかしい。どうやらChatGPTもClaudeもLlamaもみんな苦手な問題なようだ。
この文章の中で「それ」という言葉は2回出てきます。1回目は「本」を指し、2回目は彼女の友人である著者が特別だったということを彼に知らせようとした姉の気持ちやその状況を指しています。
1.「彼女が彼に贈った本は、その著者が彼女の友人だったため特別だった。」
ここでの「それ」は直接的には何も指していませんが、前の文脈から「その本」を補足する形で使われています。「その著者」という表現がこの場合に相当します。2.「しかし、彼はそれを読まずに彼女の姉に渡してしまった。」
ここでの「それ」は、「彼女が彼に贈った本」を指しています。3.「姉はそれを知って怒り、彼女に伝えようとしたが、彼女は既に彼と別れていた。」
ここでの「それ」は、姉が知って怒ったことの内容を指し、彼が本を読まずに姉に渡したことに加え、その本が特別だった理由(著者が彼女の友人)まで含めた状況全般を指しています。まとめると、「それ」という言葉は文脈によって異なるものを指しますが、この文章では主に「本」やその本に関連する状況、背景を示唆しています。
コーディングを求めるプロンプト
Llama 3.1 405Bのようなオープンソースで利用できる非常に高性能な大規模言語モデルは、商用モデルより大幅なコストカットが期待できるので、膨大なプログラムのコードベースを丸ごと読み込ませるような用途にも向いている。
プログラミングにAIのサポートが不可欠になってきた昨今、コーディングの性能も重要な評価ポイントの一つだ。
非常にシンプルだが、Pythonによるコーディングを求めるプロンプトをLlama 3.1 405Bに与えてみた。
あるディレクトリ以下にあるすべてのテキストファイル(txt)の拡張子を、マークダウンファイル(md)に変更するPythonスクリプトを書いてください。
以下が生成されたコードと、それを解説するLlama 3.1 405Bの回答だ。
import os
def change_extension(directory):
# 指定したディレクトリ以下を走査
for root, dirs, files in os.walk(directory):
for file in files:
# ファイルの拡張子が.txtである場合に処理
if file.endswith('.txt'):
base = os.path.splitext(file)[0]
new_file_name = base + '.md'
# ファイル名を変更する
old_path = os.path.join(root, file)
new_path = os.path.join(root, new_file_name)
os.rename(old_path, new_path)
if __name__ == "__main__":
directory = '.' # カレントディレクトリ以下を対象とする
change_extension(directory)
このスクリプトは、指定したディレクトリおよびそのサブディレクトリ内にあるすべての
.txt
ファイルを見つけ、拡張子を.md
に変更します。スクリプト内の変directory
に検索対象のディレクトリパスを指定してください(ここではカレントディレクトリ'.'
が指定されています)。このスクリプトを実行するには、Pythonがインストールされた環境でコマンドラインまたはターミナルを開き、このスクリプトを保存したファイルのあるディレクトリに移動してください。次に、
python スクリプト名.py
という形式のコマンドでスクリプトを実行します(スクリプト名.py
部分はこのコードを保存したファイル名に置き換えてください)。注意: このスクリプトは既存の
.md
ファイルと同名になる場合、上書きされることなくエラーが発生します。大量のファイルを処理する前にバックアップを取ることを強くお勧めします。
コードも解説も問題なく生成されており、このプロンプトでも、GPT-4oやClaude 3.5 Sonnetと肩を並べるベンチマーク結果が正しいと感じさせる結果になった。
まさに LLM戦国時代、頂点にオープンソースモデルが立つ
以上で紹介したように、ベンチマーク結果を見ても、生成される文章のクオリティを見ても、Llama 3.1 405Bモデルが、非常に高い性能を有しているのは明らかだ。
GPT-4oやClaude 3.5 Sonnetなど、世界トップに君臨してきた超高性能な商用LLMたちに、オープンソースのモデルが追いついたのは画期的なことだ。
最上位の405Bモデルを個人のPCで動かすことは中々できないが、Groqなど高速なLLM向けコンピューティングサービスが、チャットやAPIにLlama 3.1 405Bモデルを実装する日が来れば、大幅なコストダウンが期待できるかもしれない。
また、Llama 3.1 405Bという高性能な基盤モデルが存在することで、これを使って小型のモデルをトレーニングするなど、AI業界の発展が加速されることが期待できる。
大手IT企業で、唯一オープンソースの道をいくMetaの今後に、引き続き期待したい。