Views
No views yet
1from google.colab import drive
2drive.mount('/content/drive')
3
4from google.colab import userdata
5submit_key = userdata.get('submit_key') # "submit用key"
6
7# python 3.10.12
8!pip install -U pip
9!pip install -U transformers
10!pip install -U bitsandbytes
11!pip install -U accelerate
12!pip install -U datasets
13!pip install -U peft
14!pip install -U trl
15!pip install -U wandb
16!pip install ipywidgets --upgrade
17
18from transformers import (
19 AutoModelForCausalLM,
20 AutoTokenizer,
21 BitsAndBytesConfig,
22 TrainingArguments,
23 logging,
24)
25from peft import (
26 LoraConfig,
27 PeftModel,
28 get_peft_model,
29)
30import os, torch, gc
31import bitsandbytes as bnb
32from trl import SFTTrainer
33from datasets import Dataset, DatasetDict, concatenate_datasets, load_dataset
34from tqdm import tqdm
35
36from google.colab import output
37output.enable_custom_widget_manager()
38
39
40new_model_id = "ymatsuda-97/llm-jp-3-1.8B-finetune-ver3"
41
42"""
43bnb_config: 量子化の設定
44
45 - load_in_4bit:
46 - 4bit量子化形式でモデルをロード
47
48 - bnb_4bit_quant_type:
49 - 量子化の形式を指定
50
51 - bnb_4bit_compute_dtype:
52 - 量子化された重みを用いて計算する際のデータ型
53
54"""
55
56bnb_config = BitsAndBytesConfig(
57 load_in_4bit=True,
58 bnb_4bit_quant_type="nf4", # nf4は通常のINT4より精度が高く、ニューラルネットワークの分布に最適です
59 bnb_4bit_compute_dtype=torch.bfloat16,
60)
61
62"""
63model: モデル
64
65 - base_model:
66 - 読み込むベースモデル (事前に定義したもの)
67
68 - quantization_config:
69 - bnb_configで設定した量子化設定
70
71 - device_map:
72 - モデルを割り当てるデバイス (CPU/GPU) "auto"で自動に割り当てられます。
73
74tokenizer: トークナイザー
75
76 - base_model:
77 - 読み込むベースモデル (事前に定義したもの)
78
79 - trust_remote_code:
80 - リモートコードの実行を許可 (カスタムモデルなど)
81"""
82model = AutoModelForCausalLM.from_pretrained(
83 new_model_id,
84 quantization_config=bnb_config,
85 device_map="auto",
86 token=submit_key,
87)
88
89tokenizer = AutoTokenizer.from_pretrained(
90 new_model_id,
91 trust_remote_code=True,
92 token=submit_key
93)
94
95# # モデルによるタスクの推論。
96# prompt = """### 指示
97# {}
98# ### 回答
99# """
100#
101# def evaluate_task(task, filename, prompt):
102# results = []
103# for data in tqdm(task):
104# input = data["input"]
105# input_prompt = prompt.format(input)
106#
107# tokenized_input = tokenizer.encode(input_prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
108# attention_mask = tokenized_input.ne(tokenizer.pad_token_id) # torch.ones_like(tokenized_input)
109#
110# with torch.no_grad():
111# outputs = model.generate(
112# tokenized_input,
113# attention_mask=attention_mask,
114# max_new_tokens=1024,
115# do_sample=False,
116# repetition_penalty=1.2,
117# pad_token_id=tokenizer.eos_token_id
118# )[0]
119# output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
120
121