# Ctrl+C в терминале с обучениемTrainer уже сохранил чекпоинт 255000. Нужно взять его и сделать "final" версию, от которой будет стартовать фаза 2.
cd /mnt/work/audetv/go/src/github.com/terratensor/book2bert-v2
source venv/bin/activate
python3 << 'EOF'
from transformers import BertForMaskedLM
from simple_sp_tokenizer import SimpleSPTokenizer
import os
# Путь к последнему чекпоинту
checkpoint_path = "models/bert-base-ru-phase1_128/checkpoint-255000"
final_path = "models/bert-base-ru-phase1_128-final"
# Создаём директорию
os.makedirs(final_path, exist_ok=True)
# Загружаем модель из чекпоинта
print(f"Loading model from {checkpoint_path}...")
model = BertForMaskedLM.from_pretrained(checkpoint_path)
print("Model loaded!")
# Загружаем токенизатор
tokenizer = SimpleSPTokenizer("models/tokenizer/final/32k/sp_32k.model")
# Сохраняем как final
model.save_pretrained(final_path)
tokenizer.save_pretrained(final_path)
print(f"Model saved to {final_path}")
print("Ready for Phase 2!")
EOFgo run cmd/build-chunks-phased/main.go \
--cleaned data/cleaned \
--tokenizer http://localhost:8091 \
--output data/bert_full \
--workers 16 \
--val-ratio 0.02 \
--all-books \
--phase 2В PHASE_CONFIGS[2] указать новый путь:
2: {
"phase_name": "phase2_256",
"train_file": "data/bert_full/phase2_256_train.txt",
"val_file": "data/bert_full/phase2_256_val.txt",
# ...
}torchrun --nproc_per_node=2 train_bert_progressive.py --phase 2 2>&1 | tee phase2_256.logФаза 2 автоматически загрузит веса из phase1_128-final!
Вот так это работает в коде:
def load_model_from_phase(load_path, tokenizer):
if load_path and os.path.exists(load_path):
model = BertForMaskedLM.from_pretrained(load_path) # ← загружает из final
return modelА в конфиге фазы 2 указано:
2: {
"load_from": "models/bert-base-ru-phase1_128-final", # ← вот этот путь
}