サイバーエージェントの日本語LLM「cyberagent/Llama-3.1-70B」

サイバーエージェントの日本語LLM「cyberagent/Llama-3.1-70B」

cyberagent/Llama-3.1-70Bは、サイバーエージェントが公開した日本語に強いLLMです。

このモデルはMetaが開発した「Llama 3.1 70B」をベースに、日本語データを追加学習させたものです。

この記事では、cyberagent/Llama-3.1-70Bの性能から使い方まで紹介します。

11/27開催のウェビナーをお知らせ!

目次

cyberagent/Llama-3.1-70Bとは

見出し画像

「cyberagent/Llama-3.1-70B-Japanese-Instruct-2407」は、サイバーエージェントが公開した日本語に強いLLMです。

このモデルは、Metaが開発した「Llama 3.1 70B」をベースに、日本語データを追加学習させたものです。

HuggingFaceからダウンロードでき、無料で使える商用利用も可能なモデルです。

ざっくり言うと

  • cyberagent/Llama-3.1-70Bは、サイバーエージェントが公開した日本語に強いLLM
  • Llama3.1 70Bをベースに追加学習した日本語LLM
  • HuggingFaceからダウンロードでき、無料で使える商用利用も可能なモデル

ベースモデルのLlama3.1については、別記事で解説しています。

cyberagent/Llama-3.1-70Bのモデル

見出し画像

「cyberagent/Llama-3.1-70B」は、700億パラメータをもつモデルになります。

既に指示チューニングが施されているモデルになるため、人間による指示に対してChatGPTのような応答が可能です。

モデルはHuggingFaceで提供されています。

モデルIDパラメータサイズ指示チューニング公開
cyberagent/Llama-3.1-70B-Japanese-Instruct-2407700億パラメータ済みHuggingFace

cyberagent/Llama-3.1-70Bの性能

見出し画像

cyberagent/Llama-3.1-70Bの性能は、日本語能力を評価する「Nejumi LLM リーダーボード3」においてベンチマーク結果が公表されています。

以下の図は、Nejumi リーダーボード3におけるベンチマーク結果を示しており、各タスクの平均スコアをモデルごとに比較したグラフです。

cyberagent/Llama-3.1-70Bは、Llama3 70Bをベースにした他の日本語LLMよりも高い性能を示していることが分かります。

ベンチマーク
(出典:https://wandb.ai/wandb-japan/llm-leaderboard3/reports/Nejumi-LLM-3–Vmlldzo3OTg2NjM2?accessToken=wpnwc9whr96pxm40dfe4k3xq513f9jc4yhj7q6pnvj4jtayoefbc77qhzbsrztgz)
モデルの評価について

Nejumi リーダーボード3

Nejumi リーダーボードは、LLMの日本語能力を評価するために、言語理解能力、応用能力、アライメントといった複数の観点からモデルを評価します。

翻訳、要約、情報抽出、推論、知識・質問応答、倫理、バイアス、真実性などの様々なタスクに対する能力が測定されます

cyberagent/Llama-3.1-70Bの商用利用・ライセンス

見出し画像

cyberagent/Llama-3.1-70Bは、「META LLAMA 3.1 COMMUNITY LICENSE」にもとづいて、無料で使用でき商用利用も可能です。

META LLAMA 3.1 COMMUNITY LICENSEの要点

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

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

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

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

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

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

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

cyberagent/Llama-3.1-70Bの使い方

見出し画像

ここからcyberagent/Llama-3.1-70Bを使ったテキスト生成について解説していきます。

実行環境

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

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

Dockerで環境構築

Dockerを使用してcyberagent/Llama-3.1-70Bの環境構築をします

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

STEP
Dockerfileの作成

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

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

パッケージ一覧
  • CUDA:12.1
  • Python:3.10
  • PyTorch:2.2.2
  • transformers:4.44.0
  • accelerate
  • triton

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

mkdir cyber_llama31
cd cyber_llama31
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.44.0 accelerate 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:
  cyber_llama31:
    build:
      context: .
      dockerfile: Dockerfile
    image: cyber_llama31
    runtime: nvidia
    container_name: cyber_llama31
    ports:
      - "8888:8888"
    volumes:
      - .:/app/cyber_llama31
    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

cyberagent/Llama-3.1-70Bの実装

Dockerコンテナで起動したJupyter Lab上でcyberagent/Llama-3.1-70Bの実装をします。

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

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

import torch
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer,BitsAndBytesConfig
STEP
モデルとトークナイザーの設定

cyberagent/Llama-3.1-70Bのモデルとトークナイザーを読み込みます。

model_id = "cyberagent/Llama-3.1-70B-Japanese-Instruct-2407"

tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    quantization_config=BitsAndBytesConfig(load_in_4bit=True),
    device_map="auto",
)
コードの説明

“cyberagent/Llama-3.1-70B-Japanese-Instruct-2407” : モデルのタイプを指定しています。

AutoModelForCausalLM.from_pretrained():モデルを読み込みます。

torch_dtype=torch.bfloat16,:BF16の数値表現を指定しています。

quantization_config=BitsAndBytesConfig(load_in_4bit=True),:4bit量子化の指定をしています。

AutoTokenizer.from_pretrained():トークナイザーを読み込みます。

モデルIDパラメータサイズGPUメモリ
cyberagent/Llama-3.1-70B-Japanese-Instruct-2407700億パラメータ43GB
  • モデルを読み込む際にGPUメモリを消費するため、余裕を持ったGPUメモリをご用意ください。
  • この記事では、BF16の数値表現と4bit量子化した場合のGPUメモリ使用量を記載しています。
  • GPU使用量を詳しく知りたい方はベースモデルLlama3.1のVRAMに関する記事をご覧ください。

cyberagent/Llama-3.1-70Bでテキスト生成

見出し画像

cyberagent/Llama-3.1-70Bを使って、日本語での質問応答を試してみます。

日本語での質問応答

「日本のウユニ塩湖といえばどこですか?」というプロンプトを日本語で実行してみます。

DEFAULT_SYSTEM_PROMPT = "あなたは日本語で回答するアシスタントです。"
text = "日本のウユニ塩湖といえばどこですか?"

messages = [
    {"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
    {"role": "user", "content": text},
]

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

token_ids = tokenizer.encode(
    prompt, add_special_tokens=False,
    return_tensors="pt"
)

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
    )

output = tokenizer.decode(
    output_ids.tolist()[0][token_ids.size(1):], 
    skip_special_tokens=True
)
print(output)

日本のウユニ塩湖といえばどこですか?

日本のウユニ塩湖と呼ばれる場所は、香川県にある「父母ヶ浜(ちちぶがはま)」です。父母ヶ浜は、潮が引いたときに現れる幻想的な景色が特徴で、鏡のように美しい景色が広がります。ウユニ塩湖のように水面が鏡のように美しく反射する光景が見られることから「日本のウユニ塩湖」と呼ばれています。父母ヶ浜は、インスタグラムをはじめSNSで話題となり、多くの観光客が訪れる人気スポットです。父母ヶ浜は、国の名勝に指定されていて、国の天然記念物でもあります。父母ヶ浜の白い石英と青い海のコントラストはとても美しく、干潮時には、波が穏やかで、鏡のように海面が反射する様子がみられます。父母ヶ浜は、天候や気象条件に左右されるため、事前に潮汐表をチェックしてから訪れるとよいです。父母ヶ浜は、香川県三豊市にある海岸で、観光地としても有名です。父母ヶ浜は、塩田に囲まれた小さな浜辺ですが、潮が引いた時には、広い浜辺が現れます。父母ヶ浜は、天然記念物に指定されている白い石英が海岸に広がり、青い海のコントラストが美しく、干潮時には波が穏やかで、鏡のように海面が反射する様子がみられます。父母ヶ浜は、香川県の三豊市にあります。父母ヶ浜は、干潮時に美しい景色が見られるスポットです。父母ヶ浜は、香川県三豊市にある父母ヶ浜海岸のことで、国の名勝であり、国の天然記念物でもあります。父母ヶ浜は、干潮時に美しい景色が見られるスポットです。父母ヶ浜は、香川県の三豊市にあります。父母ヶ浜は、干潮時に美しい景色が見られるスポットです

香川の父母ヶ浜について詳しい情報が提供されています!

日本語での質問応答(2)

「勤怠管理システムのよくある質問(FAQ)の作成してください。」というプロンプトを日本語で実行してみます。

DEFAULT_SYSTEM_PROMPT = "あなたは日本語で回答するアシスタントです。"
text = "勤怠管理システムのよくある質問(FAQ)の作成してください。"

messages = [
    {"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
    {"role": "user", "content": text},
]

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

token_ids = tokenizer.encode(
    prompt, add_special_tokens=False,
    return_tensors="pt"
)

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
    )

output = tokenizer.decode(
    output_ids.tolist()[0][token_ids.size(1):], 
    skip_special_tokens=True
)
print(output)

勤怠管理システムのよくある質問(FAQ)の作成してください。

ここでは、勤怠管理システムのよくある質問(FAQ)を作成します。

Q1: 勤怠管理システムとは何ですか?
A1: 勤怠管理システムとは、従業員の出勤や退勤、休暇などの勤怠情報を管理するシステムです。自動で集計や分析を行い、給与計算や人事評価に活用することができます。

Q2: どのようにして打刻を行うのですか?
A2: 打刻方法は、以下の通りです。
ICカードやQRコードを使用して打刻する
Webブラウザやモバイルアプリから打刻する
顔認証や指紋認証を使用して打刻する
その他、システムによっては様々な打刻方法があります。

Q3: 打刻漏れや打刻ミスがあった場合、どうすればいいですか?
A3: 打刻漏れや打刻ミスがあった場合、管理者がシステム上で修正することができます。ただし、修正には管理者権限が必要です。また、システムによっては自動でアラートを出す機能もあります。

Q4: 勤怠データはどのようにして集計されるのですか?
A4: 勤怠データは、システムが自動で集計します。集計方法は、システムによって異なりますが、一般的には以下の通りです。
出勤日数
総労働時間
休暇取得日数
残業時間
その他

Q5: 勤怠管理システムはどのような効果がありますか?
A5: 勤怠管理システムを導入することで、以下のような効果が期待できます。
勤怠管理業務の効率化
不正打刻の防止
労働時間の適正化
人事評価の公平化
その他

Q6: セキュリティ対策はどうなっていますか?
A6: 勤怠管理システムは、以下のようなセキュリティ対策を講じています。
データ暗号化
アクセス制限
バックアップ
その他

Q7: サポート体

実用的な回答が得られました!

コードの質問応答

「Pytorchで使える活性化関数を3つ挙げて、その使い方を教えて下さい」というプロンプトを日本語で実行してみます。

DEFAULT_SYSTEM_PROMPT = "あなたは日本語で回答するアシスタントです。"
text = "Pytorchで使える活性化関数を3つ挙げて、その使い方を教えて下さい"

messages = [
    {"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
    {"role": "user", "content": text},
]

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

token_ids = tokenizer.encode(
    prompt, add_special_tokens=False,
    return_tensors="pt"
)

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
    )

output = tokenizer.decode(
    output_ids.tolist()[0][token_ids.size(1):], 
    skip_special_tokens=True
)
print(output)

Pytorchで使える活性化関数を3つ挙げて、その使い方を教えて下さい

PyTorchで使用できる活性化関数を3つ挙げ、それらの使い方を説明します。

1. **ReLU (Rectified Linear Unit)**
ReLUは、入力が正の場合に出力がそのまま入力を返し、入力が負の場合に出力を0にします。
PyTorchでは、`torch.nn.ReLU()`または`torch.nn.functional.relu()`を使用してReLUを実装できます。

```python
import torch
import torch.nn as nn
import torch.nn.functional as F

# ReLUの実装
relu = nn.ReLU()
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output = relu(input_tensor)
print(output)  # tensor([-0.,  0.,  1.])
```

2. **Sigmoid**
Sigmoidは、入力を0から1の範囲に圧縮する活性化関数です。出力は常に0から1の間になります。
PyTorchでは、`torch.nn.Sigmoid()`または`torch.nn.functional.sigmoid()`を使用してSigmoidを実装できます。

```python
# Sigmoidの実装
sigmoid = nn.Sigmoid()
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output = sigmoid(input_tensor)
print(output)  # tensor([0.2689, 0.5000, 0.7311])
```

3. **Tanh (Hyperbolic Tangent)**
Tanhは、入力を-1から1の範囲に圧縮する活性化関数です。出力は常に-1から1の間になります。
PyTorchでは、`torch.nn.Tanh()`または`torch.nn.functional.tanh()`を使用してTanhを実装できます。

```python
# Tanhの実装
tanh = nn.Tanh()
input_tensor = torch.tensor([-1.0, 0.0, 1.0])
output = tanh(input_tensor)
print(output)  # tensor([-0.7616,  0.0000,  0.7616])
```

これらの活性化関数を使用する際には、モデル定義の中でインスタンス化して使用します。たとえば、次のように使用します。

```python
class Net(nn.Module):
    def __init__(self):
        super

網羅的かつ詳しく回答できています!

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

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

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

GPUSOROBAN
GPUSOROBAN

GPUSOROBANは、生成AI・LLM向けの高速GPUを業界最安級の料金で使用することができます。

インターネット環境さえあれば、クラウド環境のGPUサーバーをすぐに利用可能です。

大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。

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

メールマガジン登録

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

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

    EdgeHUB編集部からのお知らせ

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

    11/27ウェビナー

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

    開催日時:
    2024年11月27日(水) 14:00~15:00

    内容:

    • 「LlamaIndex」と「Llama-3.1-Swallow」でRAG環境を構築
    • 生成AI開発の強い味方「GPUSOROBAN」の活用方法

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

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

    こんな方におすすめ!

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

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

    この記事を書いた人

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

    目次