TL;DR
- QLoRA-файнтюнинг модели Llama 3.1 8B на 10 000 парах инструкций, три эпохи, занимает около 95 минут на одной RTX 4090.
- Стоимость на LowCostGPU — примерно 1,6 часа по прерываемому тарифу $0,177 в час, плюс том на 20 GB.
- 24 GB достаточно: 4-битная базовая модель 8B занимает около 5,5 GB, а пиковое значение VRAM — около 14 GB при батче 4 и длине последовательности 2048.
- Ключевые настройки: lora_r 32, alpha 64, все линейные слои, чекпоинтинг градиентов и save_steps 100 — тогда прерывание обходится в одно возобновление.
Настройка: один инстанс, один том
Всё, что должно сохраняться, хранится на томе; GPU-инстанс остаётся одноразовым:
lowcostgpu volume create --name ft --size 20 --region eu-west-1
lowcostgpu launch --gpu rtx-4090 --type interruptible \
--template axolotl --volume ft:/ft --disk 40
# ✓ i-c41b9a02 running · $0,177/hrПочему прерываемый режим: axolotl сохраняет чекпоинты в /ft, поэтому прерывание стоит одного возобновления, а не всего запуска. Почему хватает 24 GB: QLoRA держит базовую модель 8B в 4-бит (~5,5 GB) + адаптеры + оптимизатор (~3 GB) + активации — пик около 14 GB при batch 4, sequence 2048. RTX 3090 за $0,074/ч справляется тоже, но примерно на 35 % медленнее.
Формат датасета
// /ft/data.jsonl — one instruction pair per line
{"instruction": "Summarize this ticket for an engineer.",
"input": "Customer reports…",
"output": "P1 — checkout API 500s when…"}На этом масштабе качество решающим образом превосходит объём: 2 000 чистых, согласованных пар превосходят 50 тыс. пар, собранных скрейпингом. Убирайте дубликаты, зачищайте шум форматирования и сохраняйте ответы точно в нужном вам тоне.
Конфигурация axolotl с комментариями
# /ft/qlora.yml
base_model: meta-llama/Llama-3.1-8B-Instruct
load_in_4bit: true # the Q in QLoRA
adapter: qlora
lora_r: 32 # capacity of the adapter; 16-64 is the sane band
lora_alpha: 64 # 2x r is the boring, correct default
lora_target_linear: true # all linear layers — better than picking modules
datasets:
- path: /ft/data.jsonl
type: alpaca
val_set_size: 0.05
sequence_len: 2048
micro_batch_size: 4
gradient_accumulation_steps: 4 # effective batch 16
num_epochs: 3
learning_rate: 2e-4
lr_scheduler: cosine
warmup_ratio: 0.03
gradient_checkpointing: true # ~30% VRAM back for ~20% speed
flash_attention: true
bf16: true
output_dir: /ft/out
save_steps: 100 # ← interruption insurance
logging_steps: 10Запуск и наблюдение
axolotl train /ft/qlora.yml
# step 10/561 · loss 1.842 · 14.1 GB VRAM · 3.4 it/s
# …
# step 561/561 · loss 0.914 · eval_loss 0.987 · 94 minЧитайте кривые так: train loss должен быстро падать, а затем выходить на плато; eval loss, падающий следом, значит обучение, а рост eval loss при падающем train loss значит запоминание — остановитесь в точке расхождения (или увеличьте val_set_size и уменьшите число эпох). При первом запуске 3 эпохи на 10 тыс. пар почти никогда не переобучают модель 8B.
Слияние, тестирование, сервинг
# merge adapters into standalone weights (on /ft, survives the instance)
axolotl merge-lora /ft/qlora.yml --lora-model-dir /ft/out
# smoke-test locally
python -m vllm.entrypoints.openai.api_server \
--model /ft/out/merged --max-model-len 4096 &
curl localhost:8000/v1/chat/completions -d '{…}'
# then destroy the trainer and serve properly
lowcostgpu destroy i-c41b9a02 --yes
lowcostgpu launch --gpu rtx-5090 --template vllm \
--volume ft:/ft:ro --env MODEL=/ft/out/mergedВыбор карты для сервинга — это отдельная от обучения оптимизация; этим правильно занимается руководство по vLLM.
Итоговый счёт
| GPU, ~96 мин, прерываемый тариф | $0,28 |
|---|---|
| Том 20 GB, 2 дня | $0,107 |
| Итого | ≈ $0,39 |
8B-модель с нужным поведением за цену сэндвича. Тот же рецепт масштабируется: 14B — на той же карте, ~34B — на карте 32 GB, 70B — на карте 80 GB за ночь — предельные значения есть в руководстве по VRAM.
Применить цифры на практике
Каждая цена в этом руководстве — наш тариф в реальном времени: фиксированный, ≥30 % ниже медианы рынка, с посекундной тарификацией. Разверните ту же конфигурацию, что описана выше, из консоли примерно за 30 секунд — оплата криптой, без карты и без KYC.


