# Google Colab

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-4d1b1778f3c8bde62a40130d7b4395b8bb1ce90f%2FColab%20Options.png?alt=media" alt=""><figcaption></figcaption></figure>

Colabノートブックを使ったことがない場合、ノートブック自体の簡単な説明：

1. **各「セル」の再生ボタン。** これをクリックするとそのセルのコードが実行されます。セルをスキップしてはいけませんし、すべてのセルを時系列に沿って実行する必要があります。エラーが発生した場合は、実行していないセルを再度実行してください。再生ボタンをクリックしたくない場合は、CTRL + ENTER を押すという選択肢もあります。
2. **上部ツールバーの Runtime ボタン。** このボタンを使って「Run all」をクリックすると、ノートブック全体を一度に実行できます。これによりすべてのカスタマイズ手順はスキップされますが、最初の試みとしては良い方法です。
3. **Connect / Reconnect T4 ボタン。** T4 は Google が提供している無料の GPU です。かなり強力です！

最初のインストール用セルは以下のようになっています：角かっこ \[ ] 内の再生ボタンをクリックするのを忘れないでください。オープンソースのGithubパッケージを取得し、いくつかの他のパッケージをインストールします。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-135cd796b01420cc4d5ce3ca243e9065154070a5%2Fimage%20(13)%20(1)%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

### Colab のサンプルコード

gpt-oss-20b をファインチューニングする Unsloth のサンプルコード：

```python
from unsloth import FastLanguageModel, FastModel
import torch
from trl import SFTTrainer, SFTConfig
from datasets import load_dataset
max_seq_length = 2048 # 内部で RoPE スケーリングをサポートしているので、任意の値を選んでください！
# LAION データセットを取得
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files = {"train" : url}, split = "train")

# 4bit 事前量子化モデルはダウンロードが4倍高速で OOM を防ぎます。
fourbit_models = [
    "unsloth/gpt-oss-20b-unsloth-bnb-4bit", # または任意のモデルを選択

] # 詳細は https://huggingface.co/unsloth を参照

model, tokenizer = FastModel.from_pretrained(
    model_name = "unsloth/gpt-oss-20b",
    max_seq_length = 2048, # 長いコンテキストには任意の値を選択！
    load_in_4bit = True,  # 4ビット量子化。False = 16ビットLoRA。
    load_in_8bit = False, # 8ビット量子化
    load_in_16bit = False, # [新機能！] 16 ビット LoRA
    full_finetuning = False, # フルファインチューニングに使用します。
    # token = "hf_...", # ゲート付きモデルを使う場合は指定してください
)

# モデルパッチ適用と高速LoRA重みの追加を行う
model = FastLanguageModel.get_peft_model(
    model,
    r = 16,
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 16,
    lora_dropout = 0, # 任意をサポートしますが = 0 が最適化されています
    bias = "none",    # 任意をサポートしますが = "none" が最適化されています
    # [NEW] "unsloth" は VRAM を30%節約し、2倍大きなバッチサイズに対応します！
    use_gradient_checkpointing = "unsloth", # 非常に長いコンテキストには True または "unsloth"
    random_state = 3407,
    max_seq_length = max_seq_length,
    use_rslora = False,  # ランク安定化LoRAをサポートします
    loftq_config = None, # および LoftQ
)

trainer = SFTTrainer(
    model = model,
    train_dataset = dataset,
    tokenizer = tokenizer,
    args = SFTConfig(
        max_seq_length = max_seq_length,
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 10,
        max_steps = 60,
        logging_steps = 1,
        output_dir = "outputs",
        optim = "adamw_8bit",
        seed = 3407,
    ),
)
trainer.train()

# 詳細なヒントは https://docs.unsloth.ai を参照してください。例えば
# (1) GGUF に保存 / vLLM 用に 16bit にマージする方法
# (2) 保存した LoRA アダプターからの継続トレーニング
# (3) 評価ループの追加 / OOM（メモリ不足）対策
# (4) カスタマイズされたチャットテンプレート
```
