見出し画像

Fugaku-LLM/Fugaku-LLM-13B-instruct を Colab で試す


富岳を使ったLLM

2024年5月10日に公開された、大規模言語モデル Fugaku-LLM を Google Colab で試しました。
スーパーコンピュータ 富岳 を用いて学習した130億パラメータの LLM です。

Hugging Face と GitHub に公開されています。

Fugaku-LLM-13B-instruct

Instruction-tuned model の Fugaku-LLM-13B-instruct を使用しました。
LLM を指示プロンプトと対応する出力のラベル付きデータセットで微調整しています。
特定のタスクだけでなく、一般的な指示に従う性能が向上し、事前訓練されたモデルを実用的な用途に適応させることができます。
利用前準備として、Hugging Face で利用規約を許諾します。

パッケージのインストール

# パッケージのインストール
!pip install -U transformers accelerate bitsandbytes

Hugging Face にログイン

Google Colabシークレット機能 に登録した'HUGGING_TOKEN' という名前のシークレット変数にアクセスし、その値(トークン)を取得。
その値を使い、Huggig Face にログインします。

# シークレットに登録したトークンを確認
from google.colab import userdata
userdata.get('HUGGING_TOKEN')

# HuggingFaceにトークンでログイン
!huggingface-cli login

モデルとトークナイザー

学習モデルのダウンロードとトークナイザーを準備します。
推奨は AutoModelForCausalLM.from_pretrained に メモリー効率を向上させる torch_dtype=torch.bfloat16 と 適切なデバイス(CPUやGPUなど)を自動的に選択する device_map="auto" を設定するようです。
今回Colabではエラーが出るので外しています。
(知識不足のためこうしましたが、恐らく有効にする手段があると思います)

# モデルのダウンロードとトークナイザー準備
import torch
# Transformersライブラリから必要なクラスをインポート
from transformers import AutoModelForCausalLM, AutoTokenizer

# ダウンロードするモデルのパス
model_path = "Fugaku-LLM/Fugaku-LLM-13B-instruct"
# 指定されたパスからトークナイザーをダウンロード
tokenizer = AutoTokenizer.from_pretrained(model_path)
# 指定されたパスから事前学習済みモデルをダウンロード
model = AutoModelForCausalLM.from_pretrained(model_path)

# 推論モードを有効
model.eval()

モデルにプロンプト

指定された システムの説明タスクの指示 からモデルにプロンプトを与え、生成されたテキストを出力します。

# モデルにプロンプトを付与
system_example = "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"
instruction_example = "スーパーコンピュータ「富岳」の名前の由来を教えてください。"

prompt = f"{system_example}\n\n### 指示:\n{instruction_example}\n\n### 応答:\n"

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

# model.generateを使用して応答を生成
# max_new_tokens=128で生成するトークンの最大数を指定
# do_sample=Trueでサンプリングを有効
# temperature=0.1で生成の多様性を調整し、top_p=1.0でサンプリングの上限を指定
tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=128,
    do_sample=True,
    temperature=0.1,
    top_p=1.0,
    repetition_penalty=1.0,
    top_k=0
)
out = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(out)

生成結果。

以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。

### 指示:
スーパーコンピュータ「富岳」の名前の由来を教えてください。

### 応答:
「富岳」は日本の理化学研究所と富士通が共同で開発したスーパーコンピュータで、富士山の異名である「富嶽」に由来している。この名前は、スーパーコンピュータが日本の研究コミュニティや産業界に広く受け入れられ、広く使用されることを願って付けられた。また、富士山が日本で最も高く、最も有名な山であることから、この名前が選ばれた。

別の例です。

## 別のプロンプト
system_example = "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"
instruction_example = "将来LLMが生活のたらす変化を教えてください。"

prompt = f"{system_example}\n\n### 指示:\n{instruction_example}\n\n### 応答:\n"

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

tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=512,
    do_sample=True,
    temperature=0.1,
    top_p=1.0,
    repetition_penalty=1.0,
    top_k=0
)
out = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(out)
以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。

### 指示:
将来LLMが生活のたらす変化を教えてください。

### 応答:
私は大規模な言語モデル(LLM)ですが、あなたの質問に答えるために最善を尽くします。

将来のLLMの生活における変化について、いくつか考えてみました:

1.アクセシビリティの向上:LLMは、障害のある人や従来のインターフェイスを使用することが困難な人にとって、テクノロジーをより利用しやすくするのに役立ちます。音声認識やタッチスクリーン入力などのテクノロジーを使用して、LLMは人々が情報にアクセスし、タスクを完了することを容易にする。

2.言語の壁の克服:LLMは、異なる言語を話す人々の間のコミュニケーションを促進し、言語の壁を克服するのに役立つ。これにより、グローバル化が進み、より多様な文化が受け入れられるようになる。

3.仕事の未来:LLMは、データ入力、コンテンツ作成、翻訳などの定型的な作業を自動化することで、多くの仕事を置き換える可能性がある。これにより、人々はより創造的で複雑な仕事に集中することができ、経済成長につながる可能性がある。

4.ヘルスケア:LLMは、医師や研究者が病気の診断や治療法の開発をより迅速かつ正確に行うのに役立つ。また、言語的・非言語的な健康情報を理解するためにも使用できる。

5.教育:LLMは、個々の学習者のニーズや能力に応じて学習体験をカスタマイズすることで、教育をよりインタラクティブで魅力的なものにすることができる。これにより、生徒の興味や学習スタイルに応じた教育が可能になる。

6.倫理的配慮:LLMは、透明性、公平性、プライバシーなど、倫理的配慮を考慮して設計および実装される必要がある。これは、責任あるAI開発の重要な側面である。

全体として、LLMの技術の進歩は、私たちの生活や働き方を変える可能性を秘めている。これらのモデルがより広く利用されるようになることで、人々の生活を向上させ、世界にポジティブな影響を与え

L4 GPUを使用

今回、Google Colab の PRO版 を使用しています。
GPUには L4 GPU

リソースの状態です。
本来、 GPU も稼働させたいのですが、今回はうまくいきませんでした。



この記事が気に入ったらサポートをしてみませんか?