Llama3とは?使い方から性能、商用利用まで分かりやすく解説!

Llama3とは?使い方から性能、商用利用まで分かりやすく解説!

Llama3は、Metaが開発した無料で使える高性能LLMです。

Llama3 70Bの性能は「Gemini1.5Pro」や「Claude3 Sonnet」を上回ると言われています。

この記事では、Llama3の性能から使い方まで紹介します。

10/30開催のウェビナーをお知らせ!

目次

Llama3とは

見出し画像

Llama3は、Metaが開発したオープンソースの高性能LLMです。

実際のユースケースを想定した人間による評価においては、GPT-3.5を上回る結果を出しています。

Llama3とLlama2の主な違いは以下のとおりです。

  • Llama2の7倍となる15兆以上のトークンを学習している
  • 基本的な言語理解に加え、翻訳や会話のような複雑なタスクが得意
  • 問題のないプロンプトに対して回答を拒否する率が下がり、応答の精度が改善

最新のLlama3.1については別記事で解説しています。

Llama3のモデル(8B、70B)

Llama3のモデルには、80億パラメータの「Llama3 8B」700億パラメータの「Llama3 70B」があります。

それぞれに「事前学習モデル」と人間の指示に基づいた回答をするための「指示学習モデル」が用意されています。

パラメータが大きくなると性能が向上しますが、GPUメモリの使用量が増えますので、ご留意ください。

モデルIDパラメータタイプ
meta-llama/Meta-Llama-3-8B80億事前学習モデル
meta-llama/Meta-Llama-3-8B-Instruct80億指示学習モデル
meta-llama/Meta-Llama-3-70B700億事前学習モデル
meta-llama/Meta-Llama-3-70B-Instruct700億指示学習モデル

Llama3の性能

Llama3の性能について、「主要ベンチマーク」と「人間による有用性評価」の指標を見ていきます。

見出し画像

主要ベンチマーク

Llama 3 8Bモデルは、主要のベンチマークで、Mistral 7BやGemma 7Bなどの他のオープンモデルを上回っています。

Llama3 70Bモデルは、Gemini 1.5 ProとClaude 3よりも一部のベンチマークでハイスコアでした。

ベンチマークの種目は、質疑応答、プログラミング、推論、算数数学になります。

llama3ベンチマーク
(出典:https://ai.meta.com/blog/meta-llama-3/)

有用性の評価

Llama3は標準的なベンチマークのほか、実際のユースケースを想定した人間による有用性の評価を行っています。

この評価では、主要なユースケースに対応する1800個のプロンプトが含まれており、それぞれのプロンプトに対する応答結果を人間が評価しました。

ユースケースの例
  • アドバイスを求める
  • ブレーンストーミング
  • 文章分類
  • クローズドな質問回答
  • コード生成
  • あるキャラクターとしての振る舞い
  • 文章の書き換え
  • 文章要約

他のモデルの応答と比較して「どちらの答えの方が優れていたか」を人間が評価した結果は下図のとおりです。

Claude SonnetやMistral Medium、GPT-3.5よりも高い評価を得たほか、前のモデルであるLlama 2に比べても高いスコアを出しています。

人間による有用性の評価
(出典:https://ai.meta.com/blog/meta-llama-3/)

Llama3の日本語能力は?

見出し画像

Llama3の学習データの95%が英語になり、日本語の学習率は高くありません。

現状は英語での利用が推奨されていますが、今後のバージョンアップにて、英語以外の言語も対応していくと言われています。

Llama3に日本語を追加学習したLLMについては別記事にて詳しく解説しています。

Llama3.1に日本語を追加学習したLLMについては別記事にて詳しく解説しています。

Llama3の商用利用・ライセンス

見出し画像

Llama3は「META LLAMA 3 COMMUNITY LICENSE」のもとで提供されています。

META LLAMA 3 COMMUNITY LICENSEの要点

商用利用:ソフトウェアやコードを商用利用することが許可されています。

改変:ソフトウェアやコードを自由に修正したり改変したりすることができます。

配布:修正したり変更したりしたソフトウェアを自由に配布することができます。

著作権表示:再配布時に、著作権の表示や契約書コピーの提供などが必要になります。

特許利用:特許利用に関する明示的な規定はありません。

商用利用は、「月間アクティブユーザーが7億人以下であれば無償で利用できる」条件つきです。

詳細は「META LLAMA 3 COMMUNITY LICENSE」のページをご確認ください。

Llama3のモデル申請

見出し画像

Llama3のモデルの利用申請をします。

HuggingFaceにログインして、Llama3のモデルページにアクセスします。

あわせて読みたい
meta-llama/Meta-Llama-3-70B-Instruct · Hugging Face We’re on a journey to advance and democratize artificial intelligence through open source and open science.

Llama3のモデルページで、「Expand to review and access」ボタンを押して展開します。

Llama3モデルページ

ページの下のほうに進むと入力フォームがありますので、

「ユーザー情報」を入力し、「ライセンス条項の同意文」にチェックを入れて、「Submit」ボタンをクリックします。

ユーザー情報登録

「Your request to access this repo has been successfully submitted…」の表示がされている間は、モデル利用申請の承認待ちのステータスになります。

利用申請待ちのステータス

「Access granted」というタイトルで承認通知メールが届いたら、モデルの利用申請が完了です。

モデル利用申請の承認メール
(出典:https://huggingface.co)

Llama3の使い方

見出し画像

ここからLlama3を使ったテキスト生成(推論)について解説していきます。

Ollamaを使ってChatGPTのような画面でテキスト生成(推論)をする方法は、別の記事で解説しています。

Llama3のファインチューニングの使い方については、別の記事で解説しています。

実行環境

この記事で用意した実行環境は以下のとおりです。

  • GPU:NVIDIA A100 80GB
  • GPUメモリ(VRAM):80GB
  • OS :Ubuntu 22.04
  • Docker

Dockerで環境構築

Dockerを使用してLlama3の環境構築をします

Dockerの使い方は以下の記事をご覧ください。

STEP
Dockerfileの作成

コンテナにインストールするパッケージは以下のとおりです。

CUDA、PyTorch、Transformersはバージョン依存関係によるエラーが起きやすいので、動作検証済のバージョン指定してインストールしています。

パッケージ一覧
  • CUDA:12.1
  • Python:3.10
  • PyTorch:2.2.2
  • transformers:4.41.2
  • bitsandbytes

Ubuntuのコマンドラインで、Dockerfileを作成します。

mkdir llama3_inference
cd llama3_inference
nano Dockerfile

Dockerfileに以下の記述を貼り付けます。

# ベースイメージ(CUDA)の指定
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04

# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y python3-pip python3-venv git nano

# 作業ディレクトリを設定
WORKDIR /app

# アプリケーションコードをコピー
COPY . /app

# Python仮想環境の作成
RUN python3 -m venv /app/.venv

# 仮想環境をアクティベートするコマンドを.bashrcに追加
RUN echo "source /app/.venv/bin/activate" >> /root/.bashrc

# JupyterLabのインストール
RUN /app/.venv/bin/pip install Jupyter jupyterlab

# PyTorchのインストール
RUN /app/.venv/bin/pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cu121

# Transformer関連のインストール
RUN /app/.venv/bin/pip install transformers==4.41.2 bitsandbytes

# コンテナの起動時にbashを実行
CMD ["/bin/bash"]

[Ctrl + S]キーで変更内容を保存し、[Ctrl + X]キーで編集モードから抜けます。

STEP
docker-compose.ymlファイルの作成

docker-compose.ymlでDockerコンテナの設定をします。

docker-compose.ymlのYAMLファイルを作成して開きます。

nano docker-compose.yml

以下のコードをコピーして、YAMLファイルに貼り付けます。

services:
  llama3_inference:
    build:
      context: .
      dockerfile: Dockerfile
    image: llama3_inference
    runtime: nvidia
    container_name: llama3_inference
    ports:
      - "8888:8888"
    volumes:
      - .:/app/llama3_inference
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    command: >
      bash -c '/app/.venv/bin/jupyter lab --ip="*" --port=8888 --NotebookApp.token="" --NotebookApp.password="" --no-browser --allow-root'

[Ctrl + S]キーで変更内容を保存し、[Ctrl + X]キーで編集モードから抜けます。

STEP
Dockerコンテナを起動

Dockerfileからビルドしてコンテナを起動します。   

docker compose up

 

Dockerの起動後にブラウザの検索窓に”localhost:8888″を入力すると、Jupyter Labをブラウザで表示できます。

localhost:8888

Llama3の実装

Dockerコンテナで起動したJupyter Lab上でLlama3の実装をします。

STEP
ライブラリのインポート

Jupyter Labのコードセルに次のコマンドを実行して、ライブラリをインポートします。

import transformers
import torch
from torch import cuda,bfloat16
STEP
モデルの設定

Llama3のモデルをダウンロードして読み込みます。

token = "******************************"

model_id = "meta-llama/Meta-Llama-3-70B-Instruct"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    token=token,
    model_kwargs={"torch_dtype": torch.bfloat16,
                  "quantization_config": {"load_in_4bit": True},
                  "low_cpu_mem_usage": True,
                 },
    device_map="auto",
)
コードの説明

token = “******************************”

Hugging Faceのアクセストークンを定義。******に実際のトークン値が入ります。

model_id = “meta-llama/Meta-Llama-3-70B-Instruct”

Llama3のモデルタイプを指定します。

transformers.pipeline

テキスト生成タスクのためのTransformerのパイプラインを設定しています。

“quantization_config”: {“load_in_4bit”: True}

量子化の有効化。量子化しない場合は、コメントアウトしてください。

low_cpu_mem_usage

Trueは、モデル読み込み時のCPUメモリの使用量を削減します。

Hugging Faceのアクセストークンの発行方法は、別の記事で解説しています。

モデルを読み込む際にGPUメモリを消費しますので、余裕を持ったGPUメモリをご用意ください。

モデルIDパラメータタイプGPUメモリの使用量量子化の有無
meta-llama/Meta-Llama-3-8B80億事前学習モデル16.4GBなし
meta-llama/Meta-Llama-3-8B-Instruct80億指示学習モデル16.4GBなし
meta-llama/Meta-Llama-3-70B700億事前学習モデル43.5GBあり
meta-llama/Meta-Llama-3-70B-Instruct700億指示学習モデル43.5GBあり

Llama3でテキスト生成

見出し画像

Llama3を使って、英語での質問応答、日本語での質問応答、コード生成を試してみます。

英語での質問応答

What role does CUDA play(CUDAのの役割は何?)というプロンプトを実行してみます。

messages = [
    {"role": "system", "content": "You are an excellent chatbot"},
    {"role": "user", "content":"What role does CUDA play?"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages, 
        tokenize=False, 
        add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])
コードの説明

messages

モデルへのプロンプトを定義しています。「What role does CUDA play?」がプロンプトです。

pipeline.tokenizer.apply_chat_template

Llama3のチャットテンプレートを適用してプロンプトを作成しています。モデルによって異なります。

terminators

生成されたテキストの終了を示すトークンを定義しています。これがないと延々とテキストが生成されます。

pipeline

Transformerのパイプラインを実行してテキストを生成します。出力するトークン数や生成確率などを指定できます。

What role does CUDA play?

CUDA is a parallel computing platform and programming model developed by NVIDIA that allows developers to use the power of graphics processing units (GPUs) to perform general-purpose computing. In other words, CUDA enables developers to harness the processing power of NVIDIA GPUs to accelerate a wide range of applications, from scientific simulations to machine learning and deep learning.
Here are some key roles that CUDA plays:
1.Parallel Computing: CUDA enables developers to write programs that can execute on the GPU, which has thousands of cores. This allows for massive parallelism, making it possible to perform complex computations much faster than on a CPU.
以下省略
————————————————————————–
(翻訳)
CUDAは、NVIDIAによって開発された並列コンピューティングプラットフォームおよびプログラミングモデルであり、開発者がグラフィックス処理ユニット(GPU)の力を利用して汎用計算を実行できるようにします。言い換えれば、CUDAは開発者がNVIDIA GPUの処理能力を活用して、科学シミュレーションから機械学習や深層学習に至るまで、幅広いアプリケーションを高速化できるようにします。
以下にCUDAの主な役割を示します:
並列コンピューティング: CUDAは、数千個のコアを持つGPU上で実行できるプログラムを開発者が書くことを可能にします。これにより、大規模な並列処理が可能になり、複雑な計算をCPUよりもはるかに速く実行できます。
以下省略

専門的な内容でも適切な回答ができています。

日本語での質問応答

「食前酒とは何ですか」というプロンプトを実行してみます。

messages = [
    {"role": "system", "content": "あなたは日本語で回答するアシスタントです"},
    {"role": "user", "content":"食前酒とは何ですか"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages, 
        tokenize=False, 
        add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

食前酒とは何ですか

食前酒(しょくぜんじゅう)は、食事の前に飲む酒を指します。日本の食文化では、食前酒を飲むことが一般的で、食事の始まりを祝うために飲むことが多いです。
食前酒は、主に日本酒やワイン、ビールなどを使用し、食事の準備や、味や匂いを覚醒させるために飲まれることが多いです。また、食前酒は、食事の流れを整える役割も果たすと考えられます。
日本では、食前酒を飲む習慣は古くからあり、特に日本酒の場合、食前酒を飲むことが日本の食文化の一部となっています。

日本語の学習率が低いところを心配していましたが、自然な日本語で生成ができてます。

コード生成

「torch.nn.Moduleの使い方を教えて下さい」というプロンプトで質問を投げてみます。

messages = [
    {"role": "system", "content": "あなたは日本語で回答するアシスタントです"},
    {"role": "user", "content":"torch.nn.Moduleの使い方を教えて下さい。"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages, 
        tokenize=False, 
        add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

torch.nn.Moduleの使い方を教えて下さい。

モデルの応答

Torch.nn.Moduleは、PyTorchのニューラルネットワークモデルの基本的なクラスです。以下は、Moduleの基本的な使い方を説明します。

1. Moduleの定義
----------------

Moduleは、`torch.nn.Module`クラスを継承して定義します。例えば、以下は、簡単なニューラルネットワークを定義するためのModuleの例です。
```python
import torch
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.fc1 = nn.Linear(784, 128)  # input layer (28x28 images) -> hidden layer (128 units)
        self.fc2 = nn.Linear(128, 10)  # hidden layer (128 units) -> output layer (10 units)

    def forward(self, x):
        x = torch.relu(self.fc1(x))  # activation function for hidden layer
        x = self.fc2(x)
        return x
```
この例では、`MyModel`クラスは、`nn.Module`クラスを継承しています。`__init__`メソッドでは、ニュ

コードも基本的に正しい内容で生成されました。

Ollamaを使ってChatGPTのような画面でテキスト生成(推論)をする方法は、別の記事で解説しています。

Llama3のファインチューニングの使い方については、別の記事で解説しています。

生成AI・LLMのコストでお困りなら

GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?

そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!

GPUSOROBAN
GPUSOROBAN

GPUSOROBANは、高性能GPU「NVIDIA H200」を業界最安級の料金で使用することができます。

NVIDIA H200は、生成AI・LLMの計算にかかる時間を大幅に短縮することが可能です。

クラウドで使えるため、大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
EdgeHUBロゴ

メールマガジン登録

Stable Diffusion・LLM・RAGに関する最新情報をいち早くお届けします。

無料メルマガの配信をご希望の方は、下記フォームよりご登録ください。

    EdgeHUB編集部からのお知らせ

    無料ウェビナーのお知らせ

    【10/30開催 無料ウェビナー】日本語のローカルLLMを使用したRAGの使い方

    RAG×日本語LLMの無料オンラインウェビナー!

    開催日時:
    2024年10月30日(水) 14:00~15:00

    内容:

    • 「LangChain」と「Llama-3-ELYZA-JP」でRAG環境を構築
    • 生成AI開発の強い味方「GPUSOROBAN」の活用方法

    このウェビナーでは、オープンソース「LangChain」で構築したRAGの使い方や、デモを紹介します。

    生成AIに関心のある方、AI技術をビジネスに活かしたい方は、ぜひこの貴重な機会にご参加ください!

    こんな方におすすめ!

    • 日本語LLMの利用を検討している方
    • AI開発に携わっている方
    • 最新のAI技術やトレンドに興味がある方
    • GPUスペック不足に悩んでいる方

    \簡単1分で申し込み!/

    この記事を書いた人

    EdgeHUBは、NVIDIAクラウドパートナーである株式会社ハイレゾが運営しています。「AIと共にある未来へ繋ぐ」をテーマに、画像生成AI、文章生成AI、動画生成AI、機械学習・LLM、Stable Diffusionなど、最先端の生成AI技術の使い方をわかりやすく紹介します。

    目次