🔖 Справочник fine-tuning

← К оглавлению урока

⚡ Минимум для старта

# Windows PowerShell
python -m venv venv
venv\Scripts\Activate.ps1
pip install -U torch transformers datasets peft accelerate
pip install -U pandas scikit-learn tqdm huggingface_hub

Пакеты

ПакетЗачем нужен
torchФреймворк обучения и инференса моделей.
transformersМодели, токенизаторы, Trainer, TrainingArguments.
datasetsHugging Face Dataset, split, map, загрузка открытых датасетов.
peftLoRA/QLoRA и другие parameter-efficient методы.
accelerateУпрощение запуска на GPU/нескольких устройствах.
pandasПроверка и сохранение табличного датасета.
scikit-learnМетрики классификации и train/test split для классических задач.
huggingface_hubЛогин, загрузка приватных моделей, публикация адаптеров.

Токены и секреты

# .env или переменные окружения
HF_TOKEN=hf_xxx

# PowerShell: временно для текущего терминала
$env:HF_TOKEN="hf_xxx"
Не хардкодьте токены. В исходном примере лекции есть HF_TOKEN = "YOUR_TOKEN_HERE". Для учебного файла это понятно, но в реальном проекте токен должен лежать в переменной окружения или secret manager.

Dataset

# data.py
from datasets import Dataset

rows = [
    {
        "instruction": "Answer the question about TechInnovate Solutions.",
        "input": "Who is the CEO?",
        "output": "The CEO of TechInnovate Solutions is Dr. Alex Morgan.",
    }
]

dataset = Dataset.from_list(rows)
split = dataset.train_test_split(test_size=0.2, seed=42)
train_dataset = split["train"]
test_dataset = split["test"]

Instruction format

# format.py
def format_example(row):
    return (
        "### Instruction: " + row["instruction"] + "\n\n"
        "### Input: " + row["input"] + "\n\n"
        "### Response: " + row["output"]
    )
⚠️ Если вы уже нашли хороший системный промпт до обучения, включайте его смысл в тренировочные примеры. Иначе модель должна будет выводить нужное поведение только из демонстраций, что требует больше данных.

Tokenizer

# tokenize.py
from transformers import AutoTokenizer

MODEL_NAME = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
tokenizer.pad_token = tokenizer.eos_token

def tokenize_function(examples):
    return tokenizer(
        examples["text"],
        truncation=True,
        max_length=512,
        padding="max_length",
    )

LoRA config

# lora.py
from peft import LoraConfig, TaskType

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
)
Важно. target_modules зависят от архитектуры модели. Для другой модели список может отличаться; проверяйте документацию модели и ошибки загрузки PEFT.

TrainingArguments

# training_args.py
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    max_steps=100,
    learning_rate=2e-4,
    logging_steps=10,
    save_steps=100,
    save_total_limit=2,
    report_to="none",
)

Trainer

# trainer.py
from transformers import Trainer, DataCollatorForLanguageModeling

data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=False,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_train,
    eval_dataset=tokenized_test,
    data_collator=data_collator,
)

trainer.train()
metrics = trainer.evaluate()

Production checklist

ОбластьМинимальная проверка
КачествоBaseline, test set, ручная выборка, regression evals.
БезопасностьSecrets вне кода, валидация входов, moderation/safety checks, red-team.
ПриватностьУдаление PII, анонимизация, шифрование, контроль доступа.
СтоимостьЛимиты токенов, rate limits, кеширование, tracking стоимости.
ЭксплуатацияЛоги, мониторинг, alerts, rollback, версия модели и датасета.