19-bo‘lim

Ishlab chiqarish - tezlik va narx

Kechikish taqsimoti, paketlash foydasi, tokenizator tanlash orqali narxni kamaytirish, xotira hisobi va kesh.

🕑 9 daqiqa o‘qish 📄 760 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Kechikishni to'g'ri o'lchash
  2. Paketlash
  3. Tokenizator narxni belgilaydi
  4. Xarajat bashorati
  5. Xotira
  6. Kesh
  7. Chiqarishdan oldin ro'yxat
  8. Xulosa

Tizim ishlayapti. Endi uni haqiqiy foydalanuvchilarga chiqarish kerak - va bu yerda boshqa savollar paydo bo'ladi.

Kechikishni to'g'ri o'lchash #

O'rtacha qiymat yetarli emas:

Python
vaqt = []
for _ in range(50):
    t = time.perf_counter()
    vek(q)
    vaqt.append((time.perf_counter() - t) * 1000)
vaqt.sort()
Natija
  o'rtacha:   11.0 ms
  median  :   11.4 ms
  p95     :   12.3 ms
  eng uzun:   13.3 ms

p95 - so'rovlarning 95% i shundan tez bajarilgani. Foydalanuvchi tajribasi aynan shu son bilan o'lchanadi, o'rtacha bilan emas.

Nega p95

O'rtacha 11 ms bo'lsa-yu, har yigirmanchi so'rov 2 soniya davom etsa, o'rtacha buni yashiradi.

Ishlab chiqarishda odatda p95 va p99 kuzatiladi. Bizning misolda taqsimot tor (11.0 va 12.3 yaqin) - bu sog'lom holat.

Paketlash #

PyTorch darsligining 19-bo'limidagi xulosa bu yerda ham amal qiladi:

Natija
  paket=  1:    10.3 ms jami ->  10.34 ms/so'rov
  paket=  4:    16.9 ms jami ->   4.21 ms/so'rov
  paket= 16:    45.2 ms jami ->   2.82 ms/so'rov
  paket= 64:   134.1 ms jami ->   2.10 ms/so'rov

Bitta so'rov 10.34 ms, 64 talik paketda esa 2.10 ms - deyarli 5 barobar tez.

Lekin 64 ta so'rovni yig'ish uchun kutish kerak. Amalda vaqt chegarasi qo'yiladi: «20 ms kutamiz yoki 16 ta so'rov yig'ilguncha».

Tokenizator narxni belgilaydi #

2-bo'limda o'zbekcha matn qimmatga tushishini ko'rgan edik. Endi qaysi tokenizator tanlanishi qanchalik muhimligini o'lchaymiz:

Natija
tokenizator                tur                       uz tok  en tok   nisbat   uz/soz
bert-base-multilingual     WordPiece                     61      44    1.39x    2.54x
paraphrase-multilingual    SentencePiece (XLM-R)         46      43    1.07x    1.92x
gpt2                       BPE (faqat inglizcha)         72      45    1.60x    3.00x

Bir xil o'zbekcha matn: 46 dan 72 tokengacha. Farq 1.6 barobar - faqat tokenizator tanlovi tufayli.

Bitta so'zda buni ko'rish oson:

Natija
  bert-base-multilingual-cased   o'rganish    5 ta: ['o', "'", 'r', '##gani', '##sh']
  paraphrase-multilingual-MiniLM o'rganish    3 ta: ['▁o', "'", 'rganish']
  gpt2                           o'rganish    5 ta: ['o', "'", 'r', 'gan', 'ish']

  bert-base-multilingual-cased   Toshkent     1 ta: ['Toshkent']
  paraphrase-multilingual-MiniLM Toshkent     1 ta: ['▁Toshkent']
  gpt2                           Toshkent     4 ta: ['T', 'osh', 'k', 'ent']
O'zbek tili uchun SentencePiece tanlang

XLM-R oilasidagi modellar (SentencePiece tokenizatori) o'zbekcha matnni eng tejamli bo'laklaydi: bir so'zga 1.92 token.

WordPiece (mBERT) 2.54, faqat inglizcha BPE (GPT-2) esa 3.00.

Bu tanlov narxga, kontekst oynasiga va sifatga bir vaqtda ta'sir qiladi. Model tanlashda nafaqat sifat ko'rsatkichiga, balki tokenizatoriga ham qarang - o'z matningizda sinab ko'ring.

2-bo'limdagi yuqoriroq nisbatlar (3-3.5x) qisqa jumlalarda va mBERT bilan o'lchangan edi. Matn uzaygan sari nisbat pasayadi, chunki uzun so'zlar takrorlanadi.

Xarajat bashorati #

Natija
  kuniga    100 so'rov -> oyiga      690,000 token = $    0.10
  kuniga  1,000 so'rov -> oyiga    6,900,000 token = $    1.03
  kuniga 10,000 so'rov -> oyiga   69,000,000 token = $   10.35

Hisob: har so'rovda 5 ta hujjat (40 tokendan) va savol (30 token) - jami 230 token. Narx misol uchun 1 mln token = $0.15 deb olingan.

Bu faqat kirish tokenlari

Haqiqiy hisobda yana uchta narsa bor:

  1. Chiqish tokenlari - odatda kirishdan qimmatroq narxlanadi.
  2. Embedding hisobi - o'z serveringizda bo'lsa, protsessor vaqti.
  3. Qayta urinishlar - xato va vaqt tugashi holatlari.

Haqiqiy narxni bilishning yagona yo'li - kichik hajmda sinab ko'rish va o'lchash. Jadval bo'yicha hisoblangan bashorat har doim past chiqadi.

Xotira #

Natija
  model parametrlari: 449 MB
      1,000 hujjat indeksi:      1.5 MB
    100,000 hujjat indeksi:    146.5 MB
  1,000,000 hujjat indeksi:   1464.8 MB

Model 449 MB - bu doimiy xarajat. Indeks esa hujjatlar soniga mutanosib o'sadi.

HujjatlarIndeksYechim
100 000 gacha~150 MBOddiy tenzor, xotirada saqlanadi
1 million~1.5 GBFAISS, diskdan o'qish
Undan ko'p-Vektor bazasi, siqilgan indeks
Bir so'rovga ketgan vaqt (kichikroq - yaxshiroq) 12 ms 6 ms 0 10.34 paket = 1 4.21 paket = 4 2.82 paket = 16 2.10 paket = 64 Paketlash 5 barobar tezlik beradi, lekin kutish vaqti qo'shadi amalda vaqt chegarasi bilan muvozanatlanadi: «20 ms yoki 16 ta so'rov»
Paketlash - eng arzon optimallashtirish; kesh esa undan ham arzon

Kesh #

Foydalanuvchilar bir xil savollarni qayta-qayta beradi:

Python
kesh = {}

def keshli_vek(s):
    k = hashlib.md5(s.encode()).hexdigest()
    if k in kesh:
        return kesh[k], True
    v = vek([s])
    kesh[k] = v
    return v, False
Natija
  5 so'rov, 3 marta keshdan olindi (60%)

Haqiqiy tizimda takrorlanish darajasi yuqori bo'ladi - eng ko'p beriladigan savollar butun trafikning katta qismini tashkil qiladi.

Keshni to'g'ri kalitlang

Kalit sifatida normallangan matnni ishlating: kichik harfga o'tkazing, ortiqcha bo'shliqlarni olib tashlang, apostrof shaklini birxillashtiring (2-bo'lim).

Aks holda «Ta'til necha kun?» va «ta'til necha kun?» ikki xil kalit bo'ladi va kesh deyarli ishlamaydi.

Hujjatlar o'zgarganda esa keshni tozalang - aks holda eski javob qaytaverdi.

Chiqarishdan oldin ro'yxat #

TekshiruvNega
Baholash to'plami bormiUsiz yaxshilanishni bilib bo'lmaydi (18-bo'lim)
Recall@k qoniqarlimiQidiruv yomon bo'lsa, qolgani ahamiyatsiz (17-bo'lim)
«Ma'lumot yo'q» ishlaydimiBilmaganda rad eta olsin
Chegara tanlanganmiRaqam bilan, taxmin bilan emas
p95 o'lchanganmiO'rtacha yetarli emas
Kesh va paketlash bormiArzon tezlik
Indeks yangilanadimiHujjat o'zgarsa, vektor ham
Narx bashorat qilinganmiKichik hajmda sinab ko'rilgan
Amaliy topshiriq
  1. 50 marta o'lchab, o'rtacha, median va p95 ni hisoblang.
  2. p95 nega o'rtachadan muhimroq ekanini tushuntiring.
  3. Paket hajmini 1, 4, 16 va 64 qilib, bir so'rovga ketgan vaqtni yozing.
  4. Paketlashning kamchiligini ayting.
  5. Bir xil matnni uch xil tokenizatorda bo'laklab, token sonini solishtiring.
  6. O'zbek tili uchun qaysi tokenizator tejamliroq ekanini aniqlang.
  7. Kuniga 5000 so'rov uchun oylik token hajmini hisoblang.
  8. 500 000 hujjat uchun indeks xotirasini hisoblang.
  9. Kesh yozib, takroriy so'rovlarda tezlik farqini o'lchang.
  10. Kesh kalitini normallash nega kerakligini misol bilan ko'rsating.

Xulosa #

  • Kechikishni p95 bilan o'lchang, o'rtacha bilan emas.
  • Bizda o'rtacha 11.0 ms, p95 esa 12.3 ms - taqsimot tor, holat sog'lom.
  • Paketlash bir so'rov narxini 10.34 ms dan 2.10 ms ga tushirdi.
  • Lekin u kutish vaqti qo'shadi - vaqt chegarasi bilan muvozanatlanadi.
  • Tokenizator tanlovi narxga to'g'ridan-to'g'ri ta'sir qiladi.
  • O'zbekcha matn: SentencePiece 1.92 token/so'z, WordPiece 2.54, GPT-2 BPE 3.00.
  • Ya'ni noto'g'ri tanlov narxni 1.6 barobar oshiradi.
  • Model 449 MB, indeks esa million hujjatda ~1.5 GB.
  • Kesh eng arzon optimallashtirish; kalitni normallash shart.
  • Chiqarishdan oldin baholash to'plami, chegara va narx bashorati tayyor bo'lsin.

Keyingi, yakuniy bo'limda hamma narsani bitta ishlaydigan loyihada birlashtiramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.