Пакеты
| Пакет | Зачем нужен |
|---|---|
torch | Фреймворк обучения и инференса моделей. |
transformers | Модели, токенизаторы, Trainer, TrainingArguments. |
datasets | Hugging Face Dataset, split, map, загрузка открытых датасетов. |
peft | LoRA/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, версия модели и датасета. |