Views
No views yet
1# /// script
2# requires-python = "3.10"
3# dependencies = [
4# "transformers[torch]",
5# "datasets",
6# "peft",
7# "bitsandbytes<0.44",
8# ]
9# ///
10
11# import os
12# from google.colab import userdata
13# os.environ["HF_TOKEN"] = userdata.get("HF_TOKEN")
14
15import torch
16from datasets import load_dataset
17from peft import AutoPeftModelForCausalLM
18from transformers import AutoTokenizer, BitsAndBytesConfig
19
20bnb_config = BitsAndBytesConfig(
21 load_in_4bit=True,
22 bnb_4bit_quant_type="nf4",
23 bnb_4bit_compute_dtype=torch.bfloat16,
24)
25
26model_id = "ftnext/gemma-2-2b-elyza-tasks-sft"
27
28tokenizer = AutoTokenizer.from_pretrained(model_id)
29tokenizer.pad_token = tokenizer.eos_token
30
31peft_model = AutoPeftModelForCausalLM.from_pretrained(
32 model_id,
33 quantization_config=bnb_config,
34 device_map={"": 0},
35)
36
37dataset = load_dataset("json", data_files="./elyza-tasks-100-TV_0.jsonl", split="train")
38
39response_format = "### 応答:\n"
40
41
42def format_prompt(input):
43 return f"以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\n\n### 指示:\n{input}\n\n{response_format}"
44
45
46@torch.no_grad
47def infer(example):
48 prompt = format_prompt(example["input"])
49 inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
50 model_output = peft_model.generate(**inputs, max_new_tokens=150)
51 output = tokenizer.decode(model_output[0], skip_special_tokens=True)
52 return {**example, "output": output[len(prompt) :]}
53
54
55inferred_ds = dataset.map(infer)
56
57inferred_ds.to_json("submission.jsonl", force_ascii=False)1@misc{vonwerra2022trl,
2 title = {{TRL: Transformer Reinforcement Learning}},
3 author = {Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallouédec},
4 year = 2020,
5 journal = {GitHub repository},
6 publisher = {GitHub},
7 howpublished = {\url{https://github.com/huggingface/trl}}
8}