peft safetensors base_model:rinna/nekomata-14b-instruction region:us
---
library_name: peft
base_model: rinna/nekomata-14b-instruction
---

# 概要

[rinna/nekomata-14b-instruction](https://huggingface.co/rinna/nekomata-14b-instruction)を[bbz662bbz/databricks-dolly-15k-ja-gozaru](https://huggingface.co/datasets/bbz662bbz/databricks-dolly-15k-ja-gozaru)でfine tuningしたモデル

# 学習パラメータ

```python
# 学習の実行
!python qlora.py \
    --model_name rinna/nekomata-14b-instruction \
    --output_dir "./output/rinna-nekomata-14b-instruction-gonaru_peft" \
    --dataset "alpaca" \
    --max_steps 1000 \
    --use_auth \
    --logging_steps 10 \
    --save_strategy steps \
    --data_seed 42 \
    --save_steps 100 \
    --save_total_limit 40 \
    --max_new_tokens 100 \
    --dataloader_num_workers 1 \
    --group_by_length \z
    --logging_strategy steps \
    --remove_unused_columns False \
    --do_train \
    --lora_r 64 \
    --lora_alpha 16 \
    --lora_modules all \
    --double_quant \
    --quant_type nf4 \
    --bf16 \
    --bits 4 \
    --warmup_ratio 0.03 \
    --lr_scheduler_type constant \
    --gradient_checkpointing \
    --source_max_len 16 \
    --target_max_len 512 \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --eval_steps 187 \
    --learning_rate 0.0002 \
    --adam_beta2 0.999 \
    --max_grad_norm 0.3 \
    --lora_dropout 0.1 \
    --weight_decay 0.0 \
    --seed 0 \
    --load_in_4bit \
    --use_peft \
    --batch_size 4 \
    --gradient_accumulation_steps 2 \
    --trust_remote_code=True
```

# 実行方法(4bit)

## 推論
```python
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

# トークナイザーとモデルの読み込み
tokenizer = AutoTokenizer.from_pretrained(
    "rinna/nekomata-14b-instruction"
)

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
    "rinna/nekomata-14b-instruction",
    quantization_config=bnb_config,
    device_map={"":0}
)
# LoRAの読み込み
model = PeftModel.from_pretrained(
    model,
    "./output/rinna-nekomata-14b-instruction-gonaru_peft/checkpoint-1000/adapter_model/",
    device_map={"":0}
)
model.eval()

# プロンプトの準備
instruction = "次の回答に正しく回答してください"
input = "まどマギで一番可愛いキャラはなんですか？"
prompt = f"""
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
{instruction}

### 入力:
{input}

### 応答:
"""

# 推論の実行
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=300,temperature=0.3,do_sample=True,pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```

## 回答

```python
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
次の回答に正しく回答してください

### 入力:
まどマギで一番可愛いキャラはなんですか？

### 応答:
マミさんでござる。
```

### Framework versions

- PEFT 0.7.2.dev0