すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:Llama3-8B のファインチューニング

最終更新日:Apr 21, 2026

Data Science Workshop (DSW) は、開発者がファインチューニングを通じてモデルをカスタマイズし、最適化できるインタラクティブなモデリングプラットフォームです。このトピックでは、Llama-3-8B-Instruct モデルを例に、DSW で Llama3 大規模言語モデル (LLM) をファインチューニングする方法を説明します。ファインチューニングにより、モデルは特定のタスクをより深く理解し、適応できるようになり、パフォーマンスが向上します。

背景情報

Llama3 は、Meta 社が 2024 年 4 月にリリースした Llama シリーズの最新モデルです。15 兆を超えるトークンでトレーニングされており、これは Llama2 データセットの 7 倍以上のサイズです。このモデルは 8K のコンテキスト長をサポートし、128K トークンの語彙を持つ改良されたトークナイザーを特徴としており、複雑なコンテキストや専門用語を処理する際に、より正確で効率的なパフォーマンスを保証します。

Llama3 は、8B と 70B のパラメーターサイズで利用可能です。各サイズには、事前学習済みモデルと命令チューニング済みモデルの 2 つのバージョンがあります。

  • 8B バージョン

    このバージョンはコンシューマー向けの GPU に最適で、計算リソースが限られたシステムでも迅速なデプロイメントと開発が可能です。高速な応答時間とコスト効率が求められるアプリケーションに適しています。

    • Meta-Llama-3-8b:8B の事前学習済みモデル。

    • Meta-Llama-3-8b-instruct:8B モデルの命令チューニング済みバージョン。

  • 70B バージョン

    大規模な AI アプリケーション向けに設計されており、その巨大なパラメーターサイズにより、非常に複雑なタスクや、優れたモデルパフォーマンスが要求されるプロジェクトに適しています。

    • Meta-Llama-3-70b:70B の事前学習済みモデル。

    • Meta-Llama-3-70b-instruct:70B モデルの命令チューニング済みバージョン。

前提条件

  • ワークスペースを作成します。詳細については、「ワークスペースの作成と管理」をご参照ください。

  • DSW インスタンスを作成します。次の主要なパラメーターを設定します。詳細については、「DSW インスタンスの作成」をご参照ください。

    • インスタンスタイプ:V100 など、少なくとも 16 GB の GPU メモリを持つ GPU インスタンスを使用します。

    • Python 環境:Python 3.9 以降を使用します。

    • イメージImage URL フィールドに dsw-registry-vpc.REGION.cr.aliyuncs.com/pai-training-algorithm/llm_deepspeed_peft:v0.0.3 を入力してください。REGION は、cn-hangzhoucn-shanghai など、お使いの DSW インスタンスが配置されているリージョンの ID に置き換えてください。リージョンと対応するリージョン ID の一覧については、次の表をご参照ください。

      リージョン

      リージョン ID

      中国 (杭州)

      cn-hangzhou

      中国 (上海)

      cn-shanghai

      中国 (北京)

      cn-beijing

      中国 (深セン)

      cn-shenzhen

  • Llama3 大規模言語モデルを使用する前に、Meta の公式ライセンスをお読みください。

    説明

    ページにアクセスできない場合は、プロキシを設定して再試行する必要がある場合があります。

ステップ 1:モデルのダウンロード

方法 1:DSW でのダウンロード

  1. DSW 開発環境を開きます。

    1. PAI コンソールにログインします。

    2. 左上のコーナーで、ご利用の DSW インスタンスが配置されているリージョンを選択します。

    3. 左側のナビゲーションウィンドウで、Workspaces をクリックします。ワークスペースページで、デフォルトのワークスペースの名前をクリックします。

    4. 左側のナビゲーションウィンドウで、Model Training > Data Science Workshop (DSW) を選択します。

    5. 使用するインスタンスを探し、Actions 列の Open をクリックして DSW 開発環境に入ります。

  2. [ランチャー] ページの Notebook セクションで、[Python 3] をクリックします。

  3. 次のコードを実行してモデルファイルをダウンロードします。このコードは、適切なダウンロードソースを自動的に選択し、現在のディレクトリにモデルファイルをダウンロードします。

    ! pip install modelscope==1.32.0 transformers==4.37.0
    from modelscope.hub.snapshot_download import snapshot_download
    snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct', cache_dir='.', revision='master')

方法 2:Meta からのダウンロード

Meta のウェブサイトにアクセスして、モデルをリクエストし、ダウンロードします

説明

ページにアクセスできない場合は、プロキシを設定して再試行する必要がある場合があります。

ステップ 2:データセットの準備

この例では、英語の詩のデータセットを使用して Llama 3 モデルをファインチューニングし、詩を生成する能力を向上させます。DSW ノートブックで次のコマンドを実行して、訓練データセットをダウンロードします。

!wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/tutorial/llm_instruct/en_poetry_train.json

このサンプルのフォーマットに基づいて独自のデータセットを準備し、特定のユースケースに適応させることもできます。モデルをファインチューニングすることで、特定のタスクに対する精度が向上します。

ステップ 3:モデルのファインチューニング

軽量な LoRA トレーニング

このチュートリアルでは、提供されているトレーニングスクリプト /ml/code/sft.py を使用して、軽量な低ランク適応 (LoRA) トレーニングを実行します。トレーニング後、モデルのパラメーターは量子化され、推論時の GPU メモリ使用量が削減されます。

accelerate launch コマンドを実行すると、指定された Python スクリプトが与えられたパラメーターで開始され、multi_gpu.yaml 設定ファイルの設定に基づいて、利用可能な計算リソースを使用してトレーニングが実行されます。

! accelerate launch --num_processes 1 --config_file /ml/code/multi_gpu.yaml /ml/code/sft.py \
    --model_name  ./LLM-Research/Meta-Llama-3-8B-Instruct/ \
    --model_type llama \
    --train_dataset_name en_poetry_train.json \
    --num_train_epochs 3 \
    --batch_size 8 \
    --seq_length 128 \
    --learning_rate 5e-4 \
    --lr_scheduler_type linear \
    --target_modules k_proj o_proj q_proj v_proj \
    --output_dir lora_model/ \
    --apply_chat_template \
    --use_peft \
    --load_in_4bit \
    --peft_lora_r 32 \
    --peft_lora_alpha 32 

以下のセクションでは、この例で使用されるパラメーターについて説明します。ニーズに合わせて変更できます。

  • accelerate launch コマンドラインツールは、複数の GPU にまたがるディープラーニングのトレーニングスクリプトを開始および管理します。

    • num_processes 1:プロセス数を 1 に設定し、マルチプロセス並列化を事実上無効にします。

    • config_file/ml/code/multi_gpu.yaml:設定ファイルへのパスを指定します。

    • /ml/code/sft.py:実行する Python スクリプトへのパスを指定します。

  • /ml/code/sft.py スクリプトのパラメーター:

    • --model_name./LLM-Research/Meta-Llama-3-8B-Instruct/:事前学習済みモデルへのパスを指定します。

    • --model_type llama:モデルタイプを指定します。この例では llama を使用します。

    • --train_dataset_name en_poetry_train.json:訓練データセットへのパスを指定します。

    • --num_train_epochs 3:トレーニングのエポック数を 3 に設定します。

    • --batch_size 8:バッチサイズを 8 に設定します。

    • --seq_length 128:シーケンス長を 128 に設定します。

    • --learning_rate 5e-4:学習率を 0.0005 に設定します。

    • --lr_scheduler_type linear:学習率スケジューラのタイプを linear に設定します。

    • --target_modules k_proj o_proj q_proj v_proj:ファインチューニング中にターゲットとするモデルモジュールを指定します。

    • --output_dir lora_model/:ファインチューニングされたモデルが保存される出力ディレクトリを指定します。

    • --apply_chat_template:トレーニング中にチャットテンプレートを適用します。

    • --use_peft:トレーニング中にパラメーター効率の良いファインチューニング (PEFT) メソッドの使用を有効にします。

    • --load_in_4bit:メモリ消費を削減するために、4 ビット精度を使用して重みをロードするようにモデルに指示します。

    • --peft_lora_r 32:LoRA 行列のランク (r) を 32 に設定します。これは、LoRA が選択された PEFT メソッドである場合に使用されます。

    • --peft_lora_alpha 32:LoRA スケーリング係数 (alpha) を 32 に設定します。

LoRA の重みのマージ

次のコマンドを実行して、LoRA の重みを事前学習済みモデルとマージします。

! RANK=0 python /ml/code/convert.py \
    --model_name ./LLM-Research/Meta-Llama-3-8B-Instruct/ \
    --model_type llama \
    --output_dir trained_model/ \
    --adapter_dir lora_model/

以下のセクションでは、この例で使用されるパラメーターについて説明します:

  • RANK=0:`RANK` 環境変数は、分散トレーニングで現在のプロセスのランクを示すために使用されます。値が `0` の場合は、単一プロセスまたは分散設定のメインプロセスであることを意味します。

  • python /ml/code/convert.py:重み変換用の `convert.py` スクリプトを実行します。

  • --model_name ./LLM-Research/Meta-Llama-3-8B-Instruct/:事前学習済みモデルへのパスを指定します。

  • --model_type llama:モデルタイプを指定します。この例では llama を使用します。

  • --output_dir trained_model/:変換されたモデルと重みが保存されるディレクトリを指定します。

  • --adapter_dir lora_model/:LoRA アダプターの重みが含まれるディレクトリを指定します。

ステップ 4:推論の実行

次のコードを実行して推論を行い、ファインチューニングの結果を検証します。この例では、モデルに春についての詩を書くように依頼します:

import torch, transformers

# model_id = "./LLM-Research/Meta-Llama-3-8B-Instruct/"
model_id = "./trained_model/"
pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device="cuda",
)

messages = [
    {"role": "user", "content": "Write a poem on a topic 'spring' "},
]

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=1024,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

以下は応答のサンプルです。ファインチューニングされたモデルは、詩を書く能力を示しています:

Here's a poem on the topic of "Spring":

As winter's chill begins to fade,
The earth awakens from its shade,
And spring's sweet breath begins to blow,
Bringing life to all that's cold and slow.

The trees regain their vibrant hue,
And flowers bloom, both old and new,
Their petals dancing in the breeze,
As sunshine warms the world with ease.

The air is filled with sweet perfume,
As blossoms burst forth in their room,
And robins sing their morning song,
As spring's awakening is strong.

The world is fresh, and new, and bright,
As spring's warm light begins to take flight,
And all around, new life unfolds,
As winter's grip begins to grow old.

So let us bask in spring's warm rays,
And let our spirits soar and sway,
For in this season, we're reborn,
And all around, new life is sworn.

I hope you enjoy it!

ステップ 5:モデルのデプロイ

ファインチューニングされたモデルの重みを Object Storage Service (OSS) にアップロードし、Elastic Algorithm Service (EAS) の ChatLLM を使用してモデルをサービスとしてデプロイできます。詳細については、「EAS での LLM アプリケーションのデプロイ」をご参照ください。

付録:DSW ギャラリーから Llama3 を実行

DSW ギャラリーには、ビルド済みの Llama3 ノートブックのサンプルが用意されています。DSW インスタンスでサンプルを開き、ワンクリックで実行したり、ニーズに合わせて変更したりできます。詳細については、「ノートブックギャラリー」をご参照ください。

よくある質問

Q:「FileDownloadError: File config.json download incomplete...」エラー

ターミナルで pip install -U modelscope を実行して modelscope パッケージをアップグレードします。次に、ノートブックページの上部にある image アイコンをクリックして Python カーネルを再起動し、モデルのダウンロードコードを再度実行します。

参考資料

ChatLLM-WebUI の重要なリリース情報については、「ChatLLM-WebUI リリースノート」をご参照ください。