Asosiy qismga o'tish

Ship va yangilash sikli

28-bob 3 kod bloki 1151 so'z

"Ship qilingan" nima degani

Bu kitobda "tez8 ship qilingan" degan ibora ko'p uchradi. Halol bo'lish uchun aniqlashtiramiz: bugun bu mahsulot modeli degani — ya'ni testlarda eng yaxshi chiqqan, va keyingi har bir model u bilan solishtiriladigan model. Tahlilchining kompyuteriga o'rnatilgan dastur hali yo'q (2-bob). "Ship" — hozircha qaror, o'rnatish emas.

Lekin model fayli o'zi tayyor, va uni qanday yetkazish, almashtirish va orqaga qaytarish — hozirdanoq loyihalangan. Bu bob — shu haqida.

Model — bitta fayl

Tez ning butun "aqli" — bitta GGUF fayl. Hamma o'qitilgan modellar bir papkada:

python10 qator
import json
import hashlib

sozlama = json.load(open(TEZ / "speed/config.json", encoding="utf-8"))
papka = Path(sozlama["model_dir"])
for model in sozlama["models"]:
    if model["name"].startswith("tez-"):
        fayl = papka / model["file"]
        holat = f"{fayl.stat().st_size / 2**20:,.0f} MB" if fayl.exists() else "hali yo'q"
        print(f"{model['name']:10s} {model['file']:26s} {holat}")
Chiqish
tez-pilot4b Tez-pilot4b-Q4_K_M.gguf    2,583 MB
tez-tez3   Tez-tez3-Q4_K_M.gguf       2,583 MB
tez-tez4   Tez-tez4-Q4_K_M.gguf       2,583 MB
tez-tez5   Tez-tez5-Q4_K_M.gguf       2,583 MB
tez-tez6   Tez-tez6-Q4_K_M.gguf       2,583 MB
tez-tez7   Tez-tez7-Q4_K_M.gguf       2,583 MB
tez-tez8   Tez-tez8-Q4_K_M.gguf       2,583 MB
tez-tez9   Tez-tez9-Q4_K_M.gguf       2,583 MB
tez-tez10  Tez-tez10-Q4_K_M.gguf      2,583 MB
tez-control8 Tez-control8-Q4_K_M.gguf   hali yo'q
tez-tez11a Tez-tez11a-Q4_K_M.gguf     2,583 MB
tez-tez11b Tez-tez11b-Q4_K_M.gguf     2,583 MB

Har biri ikki yarim gigabaytdan sal ko'p. Dastur o'zgarmaydi — faqat bu fayl almashadi. Bu yangilashni oddiy qiladi: bank IT bo'limi bitta faylni tekshiradi va almashtiradi.

Fayl haqiqiymi

Bank uchun birinchi savol: "bu fayl siz bergan faylmi, yo'lda o'zgartirilmaganmi?" Javob — xesh: faylning barmoq izi. Fayldagi bitta bayt o'zgarsa, xesh butunlay boshqacha bo'ladi. tez8 ning xeshini hisoblaymiz:

python10 qator
import time

fayl = papka / "Tez-tez8-Q4_K_M.gguf"
boshla = time.perf_counter()
xesh = hashlib.sha256()
with open(fayl, "rb") as f:
    for bolak in iter(lambda: f.read(1 << 24), b""):
        xesh.update(bolak)
print(f"SHA-256: {xesh.hexdigest()}")
print(f"hisoblash vaqti: {time.perf_counter() - boshla:.0f} soniya ({fayl.stat().st_size / 2**30:.2f} GiB)")
Chiqish
SHA-256: 55015e1352f762d3935b154825cfdba87f11aabe12784adb0cc76a3e620a8bb9
hisoblash vaqti: 13 soniya (2.52 GiB)

Yetkazishda bu xesh fayl bilan alohida beriladi (masalan, imzolangan hujjatda), va Tez har ishga tushganda faylning xeshini tekshiradi. Mos kelmasa — model yuklanmaydi. Bu tekshiruv xavfsizlik planida yozilgan, lekin kodda hali yo'q (27-bob).

Orqaga qaytarish

Yangi model eskisidan yaxshiroq chiqqan bo'lsa ham, haqiqiy ishda u kutilmagan joyda xato qilishi mumkin — 21-bobda tez9 bir ko'nikmada yutib, boshqasida yutqazdi. Shuning uchun plan: yangi fayl qo'yilganda eskisi o'chirilmaydi. Tahlilchi yoki IT bo'limi bitta tanlov bilan oldingi modelga qaytadi. Model nomi va fayli sozlamada turadi — dastur kodida emas — demak qaytarish faqat sozlamani o'zgartirish.

Yangilash sikli

Tez bir martalik mahsulot emas. Plan — "ship qil va yangilab bor" (ship and keep updating). Sikl to'rt qadamdan:

  1. Tahlilchi noto'g'ri javobni belgilaydi. Tez faqat so'rov matnini va model planini saqlaydi — jadval qatorlarini emas. 27-bobdagi muhim qo'shimcha bilan: so'rovning o'zida ism yoki hisob raqami bo'lishi mumkin, va u bank ichida tozalanishi kerak.
  2. Saqlangan so'rovlar training juftliklariga aylanadi. To'g'ri plan qo'lda yoki kod bilan yoziladi, va 13-17 boblardagi butun fabrika ishlaydi: tekshiruv, eksport, qamrov darvozasi.
  3. Keyingi model o'qitiladi (18-21 boblar).
  4. U faqat joriy modeldan hamma test to'plamlarida yutsa ship qilinadi — real jadvallardagi to'plamlar bilan birga, va 24-bobdagi bootstrap qoidasi bilan.

Bu siklning eng qimmatli qismi — birinchi qadam. Hozircha bizning hamma test va training ma'lumotlarimiz — o'zimiz tasavvur qilgan savollar. Tahlilchining haqiqiy belgilagan xatolari — real hayotdan kelgan birinchi ma'lumot bo'ladi.

Bitta sikl qancha vaqt oladi

Ikkinchi va uchinchi qadamlarning narxini o'lchangan vaqtlardan bilamiz. tez8 ning o'z fayllaridagi vaqt belgilari:

python11 qator
from datetime import datetime

papka8 = Path.home() / "tez_runs/tez8"
boshlanish = datetime.strptime(json.load(open(papka8 / "output/soup_run.json"))["run_id"][4:19], "%Y%m%d_%H%M%S")
oxirgi_qadam = max(datetime.fromtimestamp(p.stat().st_mtime) for p in (papka8 / "output").glob("checkpoint-*"))
kvantlangan = datetime.fromtimestamp((papka / "Tez-tez8-Q4_K_M.gguf").stat().st_mtime)
natijalar = sorted(datetime.fromtimestamp(p.stat().st_mtime) for p in (TEZ / "results").glob("tez8g_cpu_*.jsonl"))

print(f"o'qitish:                      {boshlanish:%H:%M} -> {oxirgi_qadam:%H:%M}  ({(oxirgi_qadam - boshlanish).seconds / 3600:.1f} soat)")
print(f"birlashtirish va kvantlash:    {oxirgi_qadam:%H:%M} -> {kvantlangan:%H:%M}  ({(kvantlangan - oxirgi_qadam).seconds / 60:.0f} daqiqa)")
print(f"benchmark (20 to'plam fayllari): {natijalar[0]:%H:%M} -> {natijalar[-1]:%H:%M}  ({(natijalar[-1] - natijalar[0]).seconds / 3600:.1f} soat, birinchi to'plamsiz)")
Chiqish
o'qitish:                      12:30 -> 18:06  (5.6 soat)
birlashtirish va kvantlash:    18:06 -> 18:15  (9 daqiqa)
benchmark (20 to'plam fayllari): 00:11 -> 02:35  (2.4 soat, birinchi to'plamsiz)

Bundan tashqari — yangi ma'lumot yasash (o'qituvchi bilan; 16-bobda bitta qisqa so'rovlar partiyasi taxminan bir yarim soat olgan). Ya'ni bitta to'liq sikl — taxminan o'n soat kompyuter vaqti. Bu tunda ishlaydigan ish: kechqurun boshlanadi, ertalab natija.

Ship qilmaslik ham qaror

Siklning eng muhim xususiyati — u har doim yangi model chiqarishi shart emas. tez7 tez6 dan farqlanmadi — ship qilinmadi. tez9 yutqazdi — ship qilinmadi. Har ikki holatda ham sikl foyda berdi: tez7 dan keyin test kattalashtirildi, tez9 dan keyin "bitta o'zgarish" qoidasi paydo bo'ldi.

Bank uchun bu xavfsizroq ham: yangilanish faqat o'lchangan yaxshilanish bo'lganda keladi. "Yangi versiya chiqdi" — avtomatik ravishda "yaxshiroq" degani emas, va Tez buni bilib turib yangilamaydi.

Hali yo'q narsalar

Bu bobdagi siklning ko'p qismi hozircha plan:

Qism Holat
Model — bitta fayl, sozlamada nomlangan Bor
Training, kvantlash, benchmark zanjiri Bor (tez10 shu zanjir bilan ishlamoqda)
Xeshni yuklashda tekshirish Yo'q
Oldingi modelga bir tanlov bilan qaytish Yo'q (ilova yo'q)
Tahlilchi xatoni belgilaydigan tugma Yo'q (ilova yo'q)
So'rovlarni bank ichida tozalash Loyihalanmagan
O'rnatuvchi va yangilash paketi Yo'q

Xulosa

  • "Ship" bugun — mahsulot modeli haqidagi qaror; o'rnatilgan dastur hali yo'q.
  • Model — bitta GGUF fayl, taxminan 2.6 GB; yangilash — fayl almashtirish, eskisi saqlanadi.
  • Fayl xesh bilan tekshiriladi — bu planda, kodda emas.
  • Yangilash sikli: tahlilchi xatoni belgilaydi, so'rov (tozalangan holda) trainingga kiradi, yangi model faqat hamma testlarda yutsa ship qilinadi.
  • Bitta sikl — taxminan o'n soat kompyuter vaqti; ship qilmaslik ham — sikl natijasi.

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar