はじめに
パラメータ数が70億パラメータ(7B)、130億パラメータ(13B)、700億パラメータ(70B)の3モデルがあるようです。さらにそれぞれにbaseモデルとinstructモデルが存在します。instructモデルはチャットのように質問に対して答えを返すモデルです。今回は「Swallow-7b-instruct-hf」と「Swallow-13b-instruct-hf」を使ってみました。結果
実行するたびに異なる答えが返ってきます。今回はそれぞれのモデルにことわざの意味を聞いてみました。
「猿も木から落ちる」
Swallow-7b-instruct-hf
dtype: torch.bfloat16 device: cuda:0
「猿も木から落ちる」ということわざは、どんなに優れた人でも、時には失敗することがあるということを教えてくれます。これは、人間や動物にも当てはまることわざです。
Swallow-13b-instruct-hf
dtype: torch.bfloat16 device: cuda:0
どんなに上手い人でも、時には失敗することがある。
「一石二鳥」
Swallow-7b-instruct-hf
一石二鳥とは、一度の労力で二つのことを同時に達成することです。
Swallow-13b-instruct-hf
一つの行動で、二つの良い結果を得ること。
Pythonスクリプト
大規模言語モデルってこんなに簡単に使えるんですね。from transformers import AutoTokenizer, AutoModelForCausalLM user_query = { "instruction": "与えられたことわざの意味を小学生でも分かるように教えてください。", "input": "一石二鳥" } # from https://huggingface.co/tokyotech-llm/Swallow-7b-instruct-hf model_name = "Swallow-7b-instruct-hf" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto" ) print(f"dtype: {model.dtype}") print(f"device: {model.device}") prompt = ( "以下に、あるタスクを説明する指示があり、それに付随する入力が更なる文脈を提供しています。" "リクエストを適切に完了するための回答を記述してください。\n\n" "### 指示:\n{instruction}\n\n" "### 入力:\n{input}\n\n" "### 応答:\n" ).format(**user_query) input_ids = tokenizer.encode( prompt, add_special_tokens=False, return_tensors="pt" ) tokens = model.generate( input_ids.to(device=model.device), max_new_tokens=256, temperature=0.7, top_p=0.99, do_sample=True, ) print(tokenizer.decode(tokens[0][input_ids.shape[1]:], skip_special_tokens=True).strip())
PC環境
Windows 11 CUDA 11.8 Python 3.11
Python環境構築
CUDA 11.8を使った場合です。pip install torch==2.1.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install transformers accelerate sentencepiece protobuf