Asosiy kontentga o‘tish
AI qo‘llanmalari

DeepSeek V4.1 Flash’ni EXL3 va vLLM yordamida ikki DGX Spark’da mahalliy ishga tushirish

DeepSeek V4.1 Flash EXL3’ni ikkita NVIDIA GB10 DGX Spark tizimida yuklab olish, sozlash, ishga tushirish, sinash va optimallashtirishni o‘rganing. Ushbu qo‘llanmada avtomatik ishga tushirgich, Engram xotirasi, DSpark spekulyativ dekodlashi, xotira xavfsizligi, sinxronlash parametrlari, API so‘rovlari, sinov va unumdorlikni sozlash yoritiladi.

DeepSeek V4.1 Flash’ni EXL3 va vLLM yordamida ikki DGX Spark’da ishga tushirish

Umumiy ma’lumot

Ushbu loyiha DeepSeek V4.1 Flash modelini ikkita NVIDIA GB10 DGX Spark tizimida mahalliy ravishda ishga tushiradi. Unda 2.9 bits-per-weight EXL3 checkpoint’i, ikkala tugun bo‘ylab tensor parallelizmi, mahalliy sm_121a kernel’lari va 8888-portdagi OpenAI bilan mos vLLM API ishlatiladi.

Ishlayotgan model identifikatori DeepSeek-v4.1-Flash-EXL3. Joylashtirish faqat matn bilan ishlaydi va CX7 orqali ulangan ikki tugunli GB10 to‘plami uchun maxsus ishlab chiqilgan.

Container EXL3 qo‘llab-quvvatlashini zarur DeepseekV41 arxitekturasini o‘z ichiga olgan ARM64 vLLM obrazi vllm/vllm-openai:deepseekv41-flash-0909 ustiga qo‘shadi.

Loyiha taqdim etadigan imkoniyatlar

  • Mahalliy OpenAI bilan mos xizmat: Ilovalar standart /v1/chat/completions endpoint’iga murojaat qilishi mumkin.
  • Ikki tugunli tensor parallelizmi: Model CX7 ulanishi orqali tensor-parallel size 2 bilan ishlaydi.
  • EXL3 kvantlash: Checkpoint o‘rtacha 2.9 bpw qiymatiga ega va per-tensor kvantlash sozlamalari bilan mul1 codebook’idan foydalanadi.
  • Mahalliy DSpark spekulyatsiyasi: Draft ekspertlari checkpoint ichida mtp.* ostida saqlangan, shuning uchun alohida draft modeli talab qilinmaydi.
  • Uzun kontekstni qo‘llab-quvvatlash: Taqdim etilgan konfiguratsiya MAX_MODEL_LEN=600000 qiymatini o‘rnatadi va 2.5 GiB KV cache pool’dan foydalanadi.
  • Faylga asoslangan Engram jadvallari: Kvantlanmagan Engram ma’lumotlari host xotirasiga biriktirib qo‘yilmaydi, balki asl modelning 47- va 48-shard’laridan o‘qiladi.
  • Avtomatlashtirilgan ishga tushirish: start.sh og‘irliklarni yuklaydi, obrazni oladi yoki yaratadi, worker bilan fayllarni ulashadi, GPU tekshiruvlarini bajaradi va API’ni ishga tushiradi.
  • Ishlash vaqtidagi himoya choralari: Launcher ishga tushirishdagi xotira zaxirasini tekshiradi, prefill bosqichlari orasida allocator’larni bo‘shatadi, yuklashdan keyin page cache’ni tozalaydi va container’larning OOM score’larini moslaydi.

Uskuna va saqlash talablari

Ushbu repository aynan ikkita NVIDIA GB10 DGX Spark tuguniga mo‘ljallangan. Standart head tuguni manzili 10.0.0.1, tugunlar esa CX7 orqali aloqa qiladi. README birinchi tugunda enp1s0f1np1/rocep1s0f1, ikkinchi tugunda esa enp1s0f0np0/rocep1s0f0 interfeyslarini sinovdan o‘tkazilgan interfeyslar sifatida ko‘rsatadi.

Taxminan 387 GiB model ma’lumotlari uchun joy ajrating:

  • Mia-AiLab/DeepSeek-V4.1-Flash-EXL3-2.9bpw manbasidagi 39 ta EXL3 shard uchun taxminan 197 GiB.
  • Asl DeepSeek’ning 47- va 48-shard’lari hamda indeks uchun taxminan 190 GiB. Ularda mahalliy Engram jadvallari mavjud.
  • Mos keluvchi obrazni yaratish o‘rniga yuklab olish mumkin bo‘lganda, e’lon qilingan container obrazi uchun taxminan 9 GiB.

Agar sizda to‘liq DeepSeek-V4.1-Flash katalogi allaqachon mavjud bo‘lsa, Engram manbasini qayta yuklamaslik uchun ENGRAM_DIR ni unga yo‘naltiring. Bu maqsadda faqat 47- va 48-shard’lar hamda indeks o‘qiladi.

DGX Spark’da host RAM ham GPU xotirasi hisoblanadi. Har bir CUDA ajratmasi umumiy xotirani darhol sarflaydi, shuning uchun saqlash va xotira sozlamalarini alohida o‘zgartirib, uzun prompt bilan sinab ko‘rish kerak.

Head tugunini tayyorlash

1. Repository’ni klonlash va muhit faylini yaratish

Joylashtirishni head Spark’dagi repository katalogidan ishga tushiring:

cp .env.example .env

Launcher birinchi ishga tushirilganda .env mavjud bo‘lmasa, uni o‘zi ham yaratadi. Faylni ko‘rib chiqing va tizimlaringiz talab qilsa, WORKER_USER hamda GID kabi qiymatlarni yangilang.

.env ichida aniq ko‘rsatilgan qiymatlar buyruq satridagi muhit prefikslaridan ustun turadi, chunki start.sh faylni meros qilib olingan muhit ustiga yuklaydi. Masalan, WEIGHT_SYNC=zfs ./start.sh buyrug‘ini bajarish o‘rniga .env ichidagi WEIGHT_SYNC qiymatini o‘zgartiring.

2. Hugging Face yuklab olish vositalarini o‘rnatish

Modelni avtomatik yuklab olish uchun transfer qo‘llab-quvvatlashiga ega Hugging Face CLI kerak:

pip install -U 'huggingface_hub[hf_transfer]'

Yuklab olishni davom ettirish mumkin. Agar uzilgan ish modelni to‘liq bo‘lmagan holatda qoldirsa, launcher yoki downloader’ni qayta ishga tushiring.

3. Serverni ishga tushirmasdan ixtiyoriy yuklab olish

vLLM’ni ishga tushirishdan oldin EXL3 va Engram fayllarini tayyorlash uchun quyidagini bajaring:

./download.sh

Avtomatik yuklab olish sukut bo‘yicha yoqilgan. Fayllarni o‘zingiz boshqarmoqchi bo‘lsangiz, konfiguratsiyada AUTO_DOWNLOAD=0 ni belgilang.

Serverni ishga tushirish

Head tugunidagi repository’dan quyidagini bajaring:

./start.sh

Birinchi ishga tushirishda launcher quyidagi asosiy amallarni bajaradi:

  1. Mavjud xotira zaxirasi va tugun konfiguratsiyasini tekshiradi.
  2. Mavjud bo‘lmagan EXL3 va Engram fayllarini yuklab oladi.
  3. ghcr.io/miaai-lab/deepseek-v4.1-flash-exl3-2x-dgx-sparks:2.9bpw ochiq obrazini yuklab oladi.
  4. Retsept stamp’i o‘zgargan yoki registry mavjud bo‘lmagan taqdirdagina lokal ravishda build qiladi.
  5. Og‘irliklarni worker uchun mavjud qiladi.
  6. EXL3 GEMM va Engram dequantization GPU tekshiruvlarini bajaradi.
  7. Ikki tensor-parallel rank’ni ishga tushiradi va API’ni 8888-portda taqdim etadi.

Toza checkout e’lon qilingan obrazdagi retsept stamp’iga mos kelishi kerak, shuning uchun odatda kompilyatsiya talab qilinmaydi.

Obraz yaratish va uzatishni boshqarish

  • BUILD=1 ./start.sh har doim image'ni lokal ravishda build qiladi.
  • SKIP_BUILD=1 ./start.sh recipe stamp'i farq qilsa ham yuklab olingan image'ni saqlab qoladi.
  • SKIP_PULL=1 ./start.sh container registry'ga murojaat qilishni oldini oladi.
  • PULL=1 ./start.sh lokal stamp mos kelsa ham image'ni qayta yuklaydi.
  • SKIP_SHIP=1 ./start.sh head image'ni worker'ga nusxalashiga yo'l qo'ymaydi.

Odatiy holatda image yuborish qayta davom ettirilishi mumkin bo'lgan rsync orqali uzatiladigan bosqichlangan tar faylidan foydalanadi. IMAGE_SHIP=stream ni o'rnatsangiz, docker save chiqishi worker'ning docker load buyrug'iga uzatiladi. Streaming vaqtinchalik disk joyini talab qilmaydi, ammo uzatilish to'xtatilsa, boshidan boshlanadi. auto rejimi qayta davom ettiriladigan uzatishni afzal ko'radi va worker diskida joy cheklanganida streaming'ga o'tadi.

Deployment'ni tekshirish va boshqarish

Ikki container'ni alohida boshqarish o'rniga launcher'ning boshqaruv buyruqlaridan foydalaning:

./start.sh status
./start.sh logs
./start.sh logs worker
./start.sh stop
./start.sh restart

Agar worker'da weight'lar allaqachon sinxronlangan bo'lsa, sinxronlash bosqichini takrorlamasdan qayta ishga tushiring:

SKIP_SYNC=1 ./start.sh restart

Ishga tushirish vaqtida 420 soniyalik log-sukut detektori ikkala rank'dan Python stack trace'larini yig'adi. Diagnostika fayllari logs/ ichiga yoziladi.

Birinchi API so'rovingizni yuboring

Server sog'lom holatga kelgach, head node'ga chat completion so'rovini yuboring. Bu smoke so'rovi o'ylashni o'chiradi, shunda bevosita javobni tekshirish oson bo'ladi:

curl -s http://127.0.0.1:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"DeepSeek-v4.1-Flash-EXL3","messages":[{"role":"user","content":"What is 17*19? Reply with the integer only."}],"max_tokens":32,"temperature":0,"chat_template_kwargs":{"enable_thinking":false}}'

Kutilgan javob 323. OpenAI bilan mos keluvchi istalgan mijoz ayni base URL va model identifikatoridan foydalanishi mumkin.

Tavsiya etilgan sampling sozlamalaridan foydalaning

Modeldan odatiy foydalanish uchun rasmiy sampling sozlamalari:

  • temperature=1.0
  • top_p=0.95
  • O'ylash yoqilgan

Chat template sukut bo'yicha 75 bilan ifodalangan yuqori darajadagi reasoning effort'dan foydalanadi. Shuningdek, u 50 uchun low, 100 uchun max yoki 1 dan 100 gacha bo'lgan butun sonni qabul qiladi.

Tavsiya etilgan sampling konfiguratsiyasidan foydalanadigan so'rov quyidagicha bo'lishi mumkin:

curl -s http://127.0.0.1:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"DeepSeek-v4.1-Flash-EXL3","messages":[{"role":"user","content":"Explain how tensor parallel inference works."}],"max_tokens":512,"temperature":1.0,"top_p":0.95,"reasoning_effort":"high"}'

DSpark spekulyativ dekodlashini tushunish

Deployment checkpoint ichiga joylashtirilgan draft expert'lar bilan DSpark spekulyativ dekodlashidan foydalanadi. Yuklab olish, yuklash yoki xizmat ko'rsatish uchun alohida drafter mavjud emas.

Asosiy vLLM konfiguratsiyasi quyidagiga teng:

--speculative-config '{"method":"dspark","num_speculative_tokens":3}'

Checkpoint'da draft block-size chegarasi beshga teng, ammo yuborilgan sozlama matn uchun tezroq o'lchangani sababli uchta spekulyativ token'dan foydalanadi. Capture o'lchamlari 1 2 3 4 6 8 12 18 24 ni o'z ichiga oladi; bunda har biri uchta spekulyativ token ishlab chiqaradigan ikkita sequence uchun olti o'lchami ham bor.

DSpark xabar qilingan o'lchovlarda bitta oqimli dekodlashni yaxshilaydi. Kengroq batch'lar uchun uni SPEC_METHOD=none bilan o'chiring. Bu taxminan 3.5 GiB xotirani ham bo'shatadi. README bitta spekulyativ oqim uchun sekundiga taxminan 31.6 token haqida xabar beradi, spekulyatsiya o'chirilgan xizmat esa to'rtta oqimda yuqoriroq jami throughput'ga erishgan.

Xotirani xavfsiz boshqarish

Har bir node uchun taxminiy taqsimot har bir rank'ga 99.5 GiB EXL3 weight'lari, 2.5 GiB KV pool'i, context'lar, NCCL, workspace'lar va CUDA graph'lari uchun taxminan 5 dan 7 GiB gacha, shuningdek vLLM process'lari, Docker, operatsion tizim va desktop uchun taxminan 9 GiB'ni o'z ichiga oladi.

Yuborilgan limitlar:

  • MAX_MODEL_LEN=600000
  • MAX_NUM_SEQS=2
  • MAX_NUM_BATCHED_TOKENS=1024
  • 2.5 GiB KV cache pool'i

KV layout avtomatik ravishda DeepSeek'ning fp8_ds_mla qiymati sifatida tanlanadi. --kv-cache-dtype parametrini bermang. O'lchangan pool 614,400 context limitida 774,400 tokenni sig'dirdi; har bir token narxi taxminan 3.4 KiB bo'ldi.

Bu checkpoint quantization'ini 2.9 ni 2 butun soniga aylantirish orqali baholamang. Uning quantization parametri har bir tensor uchun alohida tanlanadi; turli routed expert'lar, shared expert'lar, attention matrix'lari, Engram tensor'lari, MTP tensor'lari va language-model head turli qiymatlardan foydalanadi.

Warm-up'dan so'ng, xabar qilingan testlarda head taxminan 4.07 dan 4.21 GiB gacha bo'sh xotirani saqlab qoldi. 601,000 tokenli prefill bu chegarani taxminan 2.1 GiB gacha kamaytirdi. Shuning uchun o'zgarishlarni ishga tushirilgandan darhol keyin emas, balki uzoq prefill'dan so'ng tekshiring.

Xotiraga bog'liq faqat bitta sozlamani bir vaqtda oshiring. README KV pool'iga 0.5 GiB qo'shish prefill zaxirasidan taxminan 1 GiB sarflashi mumkinligi haqida ogohlantiradi. 3 GiB pool qisqa smoke test'dan o'tdi, ammo 600,000 tokenli prompt'da taxminan 470,000 token'da ishlamay qoldi.

Ixtiyoriy memory guard'dan ehtiyotkorlik bilan foydalaning

scripts/memguard.sh har soniyada bir marta /proc/meminfo ni tekshiradi va ketma-ket ikkita namuna DSV41_MEM_GUARD_GIB dan past bo'lsa, lokal serving container'ni to'xtatadi; uning odatiy chegarasi 1.5 GiB.

Guard sukut bo‘yicha o‘chirilgan, chunki u xotirani qaysi jarayon sarflaganini aniqlay olmaydi. Bosimga hostdagi aloqasiz ish yuklamasi sabab bo‘lgan taqdirda ham, u har doim o‘zining vLLM konteynerini to‘xtatadi. Uni aniq yoqish uchun quyidagini o‘rnating:

DSV41_MEM_GUARD=1

Og‘ir host tomonidagi ishlar uchun README o‘rniga muammo keltirayotgan ishni cheklashni tavsiya qiladi:

systemd-run --scope -p MemoryMax=2G <job>

Joylashtirishda ikkala konteyner uchun ham --oom-score-adj 1000 ishlatiladi. Bunga yuklashdan oldingi yuklama chegarasi tekshiruvi, har bir prefill’dan keyin allocator xotirasini bo‘shatish va yuklashdan so‘ng sahifa keshini tozalash ham kiradi.

Og‘irliklarni sinxronlashtirish strategiyasini tanlang

NFS: standart variant

NFS sinovdan o‘tkazilgan to‘plamga mos konfiguratsiyadir. U vllm-fn-nfs eksportchisidan qayta foydalanadi, EXL3 va slim Engram kataloglarini taqdim etadi hamda ularni ishchi konteynerlarga /model va /engram-src sifatida ulaydi.

./start.sh share
./start.sh

start.sh ulashish bosqichini avtomatik bajaradi, shuning uchun aniq share buyrug‘i asosan eksportni tayyorlash yoki muammolarni bartaraf etishda foydalidir.

ZFS: tugunga mahalliy nusxalar

Har bir tugunda mahalliy dataset saqlash uchun .env faylida WEIGHT_SYNC=zfs ni o‘rnating. ZFS barqarorlikni oshirishi va dastlabki replikatsiyadan keyin faqat o‘zgargan bloklarni yuborishi mumkin. Shuningdek, snapshot asosida orqaga qaytarishga imkon beradi.

Buning narxi sezilarli: har bir tugunga taxminan 385 GiB bo‘sh pool maydoni kerak. README’da sinovdan o‘tkazilgan ikkinchi Spark’da atigi taxminan 41 GiB bo‘sh joy bo‘lgani qayd etilgan, shu sababli u yerda ZFS’dan foydalanib bo‘lmagan.

Har bir tugundagi namunaviy sozlama:

sudo apt-get install -y zfsutils-linux
sudo zpool create -f models <vdev>
sudo zfs create -o recordsize=1M -o atime=off -o compression=lz4 \
  -o mountpoint=/path/to/model models/dsv41-exl3
sudo zfs create -o recordsize=1M -o atime=off -o compression=lz4 \
  -o mountpoint=/path/to/engram models/dsv41-engram
sudo zfs allow -u "$WORKER_USER" create,destroy,mount,receive,snapshot,rollback models
< p>Engram datasetini faqat 47- va 48-shardlar hamda indeks bilan to‘ldiring. 476 GiB hajmdagi to‘liq native model daraxtidan nusxa ko‘chirmang. Pool yoki ishchining zfs recv buyrug‘i mavjud bo‘lmasa, launcher oqimli uzatishga o‘tadi.

Rsync: oddiyroq mahalliy nusxa

WEIGHT_SYNC=rsync ZFS poolini talab qilmasdan, tugunga mahalliy oddiy nusxa yaratadi. U ZFS darajasidagi bloklar bo‘yicha incremental yangilanishlarni taqdim etmaydi.

Prefill’ni tezlashtirish uchun Engram ma’lumotlarini paketlang

Engram jadvallari native FP8 formatida qoladi va kvantlangan EXL3 daraxtining bir qismi emas. Sukut bo‘yicha faylga asoslangan embedding implementatsiyasi har bir qatlam uchun taxminan 47 GiB ma’lumotni xotiraga mahkamlab qo‘ymasdan satrlarni oladi.

Rank’ga xos Engram satr fayllarini har bir tugunning mahalliy NVMe’iga ko‘chirish uchun quyidagini bajaring:

./start.sh pack

Paketlash tensor parallelizm hajmi ikki bo‘lganda har bir tugunga taxminan 94 GiB ma’lumot yozadi. Bu ixtiyoriy bo‘lib, ishga tushirish uchun talab qilinmaydi. Qayd etilgan sinovlarda mahalliy paketlangan Engram fayllari prefill unumdorligini taxminan 25–50 foizga oshirdi, chunki satr topilmagan holatlarda NFS o‘rniga mahalliy to‘g‘ridan-to‘g‘ri kiritish-chiqarish ishlatildi.

Dequantization kernel’iga uzatilganda Engram satrlari fp8_e4m3fn turida qolishi kerak. Ularni uint8 sifatida ko‘rish tashqi ko‘rinishidan to‘g‘ri, ammo aslida noto‘g‘ri natija berishi mumkin.

Validatsiya testlarini ishga tushiring

Repository PyTorch yoki vLLM’ni talab qilmaydigan manba darajasidagi tekshiruvlarni o‘z ichiga oladi:

python3 tests/test_numeric_config.py
python3 tests/test_engram_src.py
python3 tests/test_engram_secondary.py
python3 tests/test_k_map.py
python3 tests/test_memory_log.py
python3 tests/test_exl3_lm_head.py
python3 tests/test_sm120_block64.py
python3 tests/test_h2d_stage.py
python3 scripts/weight_budget.py --tp 2

Chat-template parity testi uchun transformers va asl modelning encoding/encoding.py fayli kerak:

python3 tests/test_chat_template.py --src /path/to/DeepSeek-V4.1-Flash

API ishga tushgach, uchidan uchigacha smoke testini bajaring:

bash tests/test_smoke.sh

Smoke testi modeldan 17*19 ni hisoblashni so‘raydi va 323 natijasini kutadi. Xizmatni ishga tushirishdan oldin start.sh vaqtinchalik konteynerda GPU parity hamda Engram dequantization tekshiruvlarini ham bajaradi. Natijalar logs/overlay-verify.log fayliga yoziladi.

Ilg‘or ekspluatatsiya bo‘yicha maslahatlar

  • Bir yoki ikkita oqim uchun DSpark'ni afzal ko'ring: Hisobotda bitta oqimdagi dekodlash tezligi soniyasiga 31,6 token, ikkita oqim bo'yicha jami tezlik esa soniyasiga 42,5 tokenni tashkil etgan.
  • Kengroq paketlar uchun spekulyatsiyani o'chiring: SPEC_METHOD=none bilan bitta oqim o'tkazuvchanligi pasaydi, biroq hisobotdagi testda to'rtta oqim bo'yicha jami o'tkazuvchanlik soniyasiga 53,7 tokenga yetdi.
  • Takroriy uzun promptlar uchun Engram'ni paketlang: Mahalliy NVMe qator fayllari head node'ning NFS eksportiga bog'liqlikni kamaytiradi va prefill tezligini sezilarli oshirishi mumkin.
  • Joylashtirishni faqat matn bilan cheklang: SM120 yadrosi muhiti modelning ko'rish tokenlari kengligi uchun zarur bo'lgan sparse-MLA yadrosini taqdim etmaydi.
  • EXL3 yordamchi oqimlarini shoshilinch qayta yoqmang: Joylashtirish EXL3 oqimlarini ketma-ket bajaradi, chunki turli CUDA oqimlaridagi ikkita yadro qurilmaga bitta qulf buferidan foydalanadigan runtime bilan deadlock holatiga tushishi mumkin.
  • To'g'ri tarmoq interfeyslarini kuzating: NCCL 10.0.0.x loopback aliaslaridan foydalana olmaydi. Har bir NIC uchun GID noto'g'ri tanlansa, taxminan bir daqiqadan so'ng ibv_modify_qp errno 61 xatosi bilan ishlash to'xtashi mumkin.
  • Uzoq prefill paytidagi xotirani tekshiring: Tizimning muvaffaqiyatli yuklanishi va qisqa smoke testlar kattaroq KV pool yoki kontekst sozlamasi xavfsiz ekanini isbotlamaydi.
  • Repository launcher'idan foydalaning: U NFS yoki mahalliy sinxronizatsiyani, dastlabki tekshiruvlarni, image verifikatsiyasini, ikki rankli ishga tushirishni va diagnostikani muvofiqlashtiradi.

Kutilayotgan unumdorlik

E'lon qilingan o'lchovlarda bitta dekodlash oqimi uchun soniyasiga 31,6 token, ikkita oqim uchun esa jami soniyasiga 42,5 token ko'rsatilgan. Qisqa promptli prefill paketlangan Engram ma'lumotlari va guruhlangan ekspert yadrolari bilan taxminan soniyasiga 965–1 041 tokenni tashkil etgan.

Uzun promptli prefill tabiiy ravishda sekinlashadi. Hisobotdagi misollar 100 000 tokenli prompt uchun taxminan soniyasiga 979 token, 455 000 token uchun soniyasiga 802 token va 601 000 token uchun soniyasiga 810 tokenni o'z ichiga oladi. Haqiqiy natijalar prompt shakli, saqlash konfiguratsiyasi, spekulyatsiya, paket kengligi va sozlangan prefill bo'lagi hajmiga bog'liq.

Xulosa

Ushbu loyiha DeepSeek V4.1 Flash'ni ikkita GB10 DGX Spark'da xizmat sifatida ishga tushirish uchun zarur bo'lgan maxsus yadrolar, EXL3 loader'i, faylga asoslangan Engram implementatsiyasi, tarmoq konfiguratsiyasi, xotira boshqaruvlari va launcher'ni jamlaydi. Yetkazib berilgan standart sozlamalardan boshlang, smoke test yordamida API'ni tekshiring, so'ngra bir vaqtning o'zida faqat bitta sozlamani o'zgartirib sozlang. Eng xavfsiz ishlash uchun real uzun prefill yuklamalarida ham o'tkazuvchanlikni, ham mavjud xotirani baholang.