Мазмұнға өту
5 мин оқу

GPU-нодаға қайталанымды модель пакетін қалай жинауға болады

Қайталанымды модель пакеті салмақтарды, токенизаторды, чат шаблонын, конфигурацияны және SHA256 мәндерін бекітеді. Бұл жаңа GPU-нода жауаптардың өзгермеуіне көмектеседі.

GPU-нодаға қайталанымды модель пакетін қалай жинауға болады

Жаңа GPU-нодаға салмақтар файлын көшіріп, API-ды сәтті іске қосқанның өзінде, ол ескі нода сияқты жауап бермеуі мүмкін. Айырмашылықты көбіне салмақтардың өзі емес, токенизатор, диалог шаблоны, декодтау параметрлері, кванттау, қозғалтқыш нұсқасы және модель каталогындағы құжатталмаған қолмен жасалған өзгеріс тудырады.

Мұндай ақауды таныс түрде көрдім: команда жабдықты ауыстырады, бір сұрауды тексереді, жылдамдыққа қуанады, ал бір аптадан кейін өнім командасы жауаптардың қысқарғанын, JSON кейде бұзылатынын және жүйелік нұсқау әлсірегендей болғанын байқайды. Инженерлер GPU мен драйверлерді салыстыра бастайды. Ал мәселе көбіне tokenizer_config.json файлында, басқа chat_template.jinja шаблонында немесе ешкім жеткізілімнің бір бөлігі деп санамаған EOS-токен мәнінде жатады.

Қайталанымды модель пакеті бір кездері біреудің машинасында жиналған бума емес, релиздік артефакт болуы керек. Оның мақсаты қарапайым: жаңа нодада бірдей кіріс деректер үшін дәл сол жауап келісімшартын алу. Мәтіннің байт бойынша сәйкес келуі мүмкін болса, пайдалы, бірақ өндірісте ең маңыздысы, бірдей деп нақты нені санайтыныңызды алдын ала белгілеу.

Салмақтар модельді толық сипаттамайды

Салмақтар файлы нейрондық желі параметрлерін береді, бірақ рантаймға пайдаланушы хабарламаларын токендер тізбегіне қалай айналдыру және генерацияны қай жерде тоқтату керегін айтпайды. Сондықтан артефакттар тізімінсіз «сол модельді орналастырдық» деген сөз ештеңеге кепілдік бермейді.

Әдеттегі instruction-модель пакеті кемінде мыналарды қамтуы керек:

  • таңдалған форматтағы салмақтар және шардталған жиынтықтың барлық бөліктері;
  • архитектурасы, токен идентификаторлары және позиция параметрлері көрсетілген config.json;
  • токенизатор файлдары, мысалы tokenizer.json, tokenizer.model, tokenizer_config.json, special_tokens_map.json;
  • chat_template.jinja файлына шығарылған немесе токенизатор конфигурациясында жазылған чат шаблоны;
  • генерация ережелері және тоқтатуды шектейтін параметрлер;
  • рантайм, кванттау және іске қосу тәсілі туралы сипаттама.

Transformers экожүйесінде чат шаблоны токенизаторда сақталып, apply_chat_template() әдісімен қолданылады. Hugging Face құжаттамасында токенизатор сақталған кезде шаблонның да бірге, соның ішінде бөлек chat_template.jinja файлы ретінде сақталатыны көрсетілген. Бұл дұрыс әрекет, бірақ көшіру кезінде тек model.safetensors файлын көшірсеңіз, ол көмектеспейді.

Командалар жиі араластыратын төрт ұғымды бөлек қарастырыңыз.

Біріншісі, артефакттардың бірдейлігі. Бұл файл байттарының сәйкес келетінін білдіреді. Оны хештермен тексереді.

Екіншісі, модель кірісінің бірдейлігі. Бұл сервер бірдей хабарламалар массивінен дәл сол token ID тізбегін құрды дегенді білдіреді. Мұнда токенизатор мен чат шаблоны шешуші рөл атқарады.

Үшіншісі, декодтаудың бірдейлігі. Ол temperature, top_p, top_k, seed, stop-тізбектер логикасына, қайталап көрулерге және ұзындық шектеулеріне тәуелді.

Төртіншісі, орындаудың бірдейлігі. Ол inference-қозғалтқыш нұсқасына, attention режиміне, CUDA-ға, драйверге, GPU архитектурасына және салмақтар ұсынылған форматқа байланысты.

Бірінші деңгейді қалғандарымен шатастырсаңыз, команда мінсіз SHA256 мәндеріне ие бола тұра, әртүрлі жауаптарды зерттейтін болады.

Хабарлама шаблоны кірісті ойлағаннан да қатты өзгертеді

Чат шаблоны презентация қабаты емес. Ол модель мәтінді жалғастыратын нақты промптты қалыптастырады. Бір шаблон жүйелік хабарлама қосады, екіншісі оны елемейді. Бірі әр хабарламадан кейін EOS қояды, екіншісі жауап басталатын ассистент маркерін қосады. Бірі құралдарды JSON ретінде сериализациялайды, екіншісі оларды кәдімгі мәтін ретінде береді.

Қолданбаның бір сұрауын алайық:

{
  "messages": [
    {"role": "system", "content": "Отвечай только JSON."},
    {"role": "user", "content": "Назови столицу Казахстана."}
  ]
}

Бір нодада шаблон оны шартты түрде мынадай жолға айналдыруы мүмкін:

<bos><system>
Отвечай только JSON.<eos>
<user>
Назови столицу Казахстана.<eos>
<assistant>

Басқа нодада кітапхана басқа нұсқаны қолдануы мүмкін:

<bos>[INST] Отвечай только JSON.

Назови столицу Казахстана. [/INST]

Модель бастапқы JSON API-ды көрмейді. Ол осы сериализациядан кейін алынған token ID мәндерін көреді. Жоғарыдағы екі нұсқаның ұзындығы, арнайы токендері және контексті әртүрлі. Бірдей нәтиже күтудің өзі қате болар еді.

Шаблонды мәтіндік ескерту емес, бағдарламалық код ретінде тексеріңіз. Әр релиз үшін тест жиынтығына system, бірнеше user және assistant кезегі бар бір диалогты, бос контентті, Unicode мәтінді, хабарламадағы JSON-ды және өнім құралдарды пайдаланса, құрал шақыруын қосыңыз. Тек нәтижені емес, құрылған промптты немесе token ID массивін де тексеріңіз.

Мұндай snapshot үшін ең қарапайым скрипт мынадай болуы мүмкін:

from transformers import AutoTokenizer
import json

path = "./bundle/model"
tokenizer = AutoTokenizer.from_pretrained(path, local_files_only=True)
messages = [
    {"role": "system", "content": "Отвечай только JSON."},
    {"role": "user", "content": "Назови столицу Казахстана."}
]

rendered = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
ids = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True
)

print(json.dumps({
    "rendered": rendered,
    "token_count": len(ids),
    "token_ids": ids
}, ensure_ascii=False, indent=2))

Тек әдемі мәтіндік промпт нұсқасын сақтауға тырыспаңыз. Ол адамға түсінікті, бірақ мәтінде арнайы таңбалар жасырынса немесе ұқсас токендер арасында айырмашылық болса, қатаң салыстыруға мүмкіндік бермейді. Мәтінді де, token ID мәндерін де сақтаңыз. Token ID сәйкес келмесе, мәселе GPU-ға дейін пайда болған.

Манифест файлдарды іске қосу келісімшартымен байланыстырады

Артефакттар каталогы манифест жасалғаннан кейін ғана жеткізілетін пакетке айналады. Манифест кезекші инженер чаттан іздемеуі тиіс сұрақтарға жауап беруі керек: файлдар қайдан алынды, қандай ревизия мақұлданды, нақты нені тексеру керек, модельді қандай қозғалтқыш іске қосады және жауаптың қандай қасиеттері қолайлы деп саналады.

main, latest сияқты өзгермелі сілтемелерді немесе ревизиясыз модель атауын қолданбаңыз. Hugging Face Hub әдепкі бойынша репозиторийдің соңғы ревизиясын жүктейді, ал snapshot_download() функциясы revision параметрін нақты беруге мүмкіндік береді. Құжаттама жергілікті snapshot-тардың нақты ревизиямен байланысатынын көрсетеді. Мұны негізге алған дұрыс, бірақ репозиторий идентификаторының өзі жеткіліксіз: жүктегеннен кейін жеке файлдар манифестін бәрібір тексеріңіз.

Төменде manifest.json мысалы берілген. Мәндер әдейі шартты түрде көрсетілген. Нақты жеткізілімде көп нүктелі өрістер қалдырмаңыз және скрипттің әдепкі мәндерді үнсіз қоюына жол бермеңіз.

{
  "bundle_format": 1,
  "model_id": "instruction_model_32b",
  "source_revision": "8f2c1a7b4d8e9f00112233445566778899aabbcc",
  "artifacts": {
    "config.json": "sha256:4c1f...",
    "generation_config.json": "sha256:9a20...",
    "tokenizer.json": "sha256:6dc8...",
    "tokenizer_config.json": "sha256:28f1...",
    "special_tokens_map.json": "sha256:73ab...",
    "chat_template.jinja": "sha256:1ef4...",
    "model_00001_of_00004.safetensors": "sha256:ad92...",
    "model_00002_of_00004.safetensors": "sha256:c030...",
    "model_00003_of_00004.safetensors": "sha256:71a6...",
    "model_00004_of_00004.safetensors": "sha256:fe25..."
  },
  "runtime": {
    "engine": "approved_engine",
    "engine_version": "0.0.0",
    "container_digest": "sha256:0e4d...",
    "quantization": "none",
    "dtype": "bfloat16",
    "tensor_parallel_size": 2
  },
  "generation": {
    "temperature": 0,
    "top_p": 1,
    "max_tokens": 256,
    "seed": 12345,
    "stop_token_ids": [2]
  },
  "acceptance_suite": "acceptance_2026_07_23.json"
}

«Модель нұсқасы» дегенді бір ғана өріске жазбаңыз. Бұл адамға ыңғайлы белгі, бірақ техникалық идентификатор ретінде нашар. Манифестте бастапқы қойма ревизиясын, әр файлдың хешін, пакет жинағының нұсқасын, қозғалтқышты және оның образын бөлек бекітіңіз. Сонда зерттеу команда «3-релиз» дегенде нақты нені меңзегені туралы даудан басталмайды.

Model card та пайдалы, бірақ ол манифестің орнын баспайды. Hugging Face model card-ты қайталанымдылық, қолдану, оқыту және бағалау туралы ақпарат беретін құжат ретінде сипаттайды. Онда шығу тегін, лицензияны, шектеулерді және ішкі мақұлдау процесіне сілтемені қалдырыңыз. Ал манифест машина оқитын болуы және артефакттар сәйкес келмесе, іске қосуды тоқтатуы керек.

Бақылау қосындыларын алғашқы іске қосудың алдында есептеңіз

Wiki-ге жазылған хеш жеткізілімді қорғамайды. Тексеру орнату процедурасының бөлігі болып, процесс салмақтарды жадқа жүктемей тұрып қателікпен аяқталуы тиіс.

Жинақтау машинасында тізімді былай жасаңыз:

cd bundle/model
find . -type f ! -path './.cache/*' -print0 | sort -z | xargs -0 sha256sum > ../SHA256SUMS

Жаңа нодада оны былай тексеріңіз:

cd bundle
sha256sum -c SHA256SUMS

Дұрыс нәтиже мынадай болады:

model/config.json: OK
model/tokenizer.json: OK
model/chat_template.jinja: OK
model/model_00001_of_00004.safetensors: OK

sha256sum -c бүлінген немесе ауыстырылған файлды анықтайды, бірақ рантайм күтілген файлдың орнына таңдай алатын артық файлды байқамайды. Сондықтан орнатқыш бос каталогта жұмыс істеп, тек манифестегі файлдарға рұқсат беруі керек. Тексерістен кейін скрипт ағашты аралап, салыстырмалы жолдарды қалыпқа келтіреді және табылған файлдар жиынын manifest.json ішіндегі artifacts жиынымен салыстырады.

Салмақтардың екі форматы қатар тұрған жағдай аса қауіпті. Бумада .bin және .safetensors файлдары бар, ал рантаймның әртүрлі нұсқалары әртүрлі файл таңдайды. Команда бір модель орнаттық деп ойлайды, бірақ нодалар іс жүзінде әртүрлі ұсыныстарды пайдаланады. Релиз каталогында нақты іске қосу тәсілі үшін мақұлданған форматты ғана қалдырыңыз. Бастапқы файлдар архивін бөлек сақтаңыз.

SHA256 тұтастықты қорғайды, бірақ шығу тегін растамайды. Қаскүнем немесе қате процесс файл мен манифестті қатар өзгертсе, тексеріс бәрібір өтеді. Сенім шекаралары арасында тасымалданатын пакеттер үшін манифестке релиз кілтімен қол қойып, нодада сенімді ашық кілт арқылы қолтаңбаны тексеріңіз. Хеш «файл манифестке сәйкес келе ме?» деген сұраққа, ал қолтаңба «бұл манифестті кім мақұлдады?» деген сұраққа жауап береді. Бұл екі бөлек тексеріс, пакет сенім шекарасынан өткен жерде екеуі де қажет.

Генерация детерминизмінің шегі бар

AI-контентке белгі қосыңыз
AI Router Қазақстанның AI туралы заң талаптарына сәйкес контентті белгілеуді қолдайды.

Temperature 0 бүкіл сервисті математикалық тұрғыда өзгермейтін етпейді. Бұл параметр әдетте кездейсоқ таңдауды алып тастап, ықтималдығы ең жоғары келесі токенді таңдауға әкеледі, бірақ бірдей немесе өте жақын логиттер, әртүрлі kernel-дер және қалқымалы нүктелі есептеулердегі айырмашылықтар таңдауды өзгерте алады. Алғашқы басқа токеннен кейін бүкіл мәтін басқа траекторияға түседі.

Тексермей тұрып, пайдаланушыларға «кез келген жабдықта жауап бірдей болады» деп уәде бермеңіз. Оның орнына үш келісімшарттың бірін таңдаңыз.

Бірінші келісімшарт, қатаң: мақұлданған аппараттық конфигурацияда және нақты образда token ID массиві бірдей болуы керек. Бұл регрессиялық тестер мен temperature 0 қолданылатын тар міндеттерге жарайды.

Екіншісі, қолданбалық: JSON-ның міндетті өрістері, типтері, жіктеу мәндері, шақырылған құрал немесе бағыттау шешімі бірдей болуы керек. Ол сервистердің көпшілігіне сәйкес келеді.

Үшіншісі, сапалық: жауап бөлек бағалаушы арқылы рубрика бойынша тексеріледі. Бұл еркін мәтін үшін қажет, бірақ көшіру кезінде жалғыз қорғаныс бола алмайды, өйткені бағалаушының өзі шешімін өзгертуі мүмкін.

Генерация параметрлерін толық бекітіңіз. «temperature 0 қолданамыз» толық баптау емес. max_tokens, top_p, top_k, бар болса min_p, seed, repetition penalty, presence penalty, frequency penalty, stop-жолдар, stop token ID, stop-маркерді жауаптан алып тастау логикасы және шекке жеткен кездегі әрекет қажет. Бір API тоқтату жолын декодтаудан кейін, екіншісі оған дейін тексеруі мүмкін. JSON үшін бұл жабылатын жақшаны аласыз ба, әлде толық емес объектіні ме дегенді шешеді.

Релиздік пакетте нақты модель үшін мағынасы белгілі болса, stop token ID көрсету дұрысырақ. Жолдық stop-тізбектерді тек қолданба оларды шынымен қажет ететін және көпбайтты Unicode арқылы нәтижені тексерген жағдайда қалдырыңыз. «</answer>» жолы модель маркердің бір бөлігін токендерге басқа тәсілмен бөлгенде немесе клиент ағынды серверден бұрын қысқартқанда ғана қауіпсіз көрінуі мүмкін.

Қозғалтқыш пен GPU нұсқасы тексеру аясына кіреді

Контейнер пайдалы, өйткені ол Python, кітапханалар мен сервер процесін бекітеді. Бірақ ядро драйвері мен физикалық GPU-ды бекітпейді. Образы бірдей, алайда үдеткіш архитектурасы немесе драйвері рұқсат етілген диапазоннан тыс нода іске қосылмауы, басқа kernel таңдауы немесе жоғары жүктемеде өзгеше әрекет көрсетуі мүмкін.

NVIDIA CUDA үйлесімділігін әмбебап уәде емес, шектеулі режимдер жиынтығы ретінде сипаттайды. CUDA 11 және одан кейінгі нұсқалар үшін жеткілікті драйвер болғанда негізгі нұсқа отбасының ішінде үйлесімділік мүмкін, бірақ құжаттама функциялар шектеулерін және ескі драйверде PTX қолданатын қолданбалардағы мәселелерді бөлек ескертеді.

Мұны мақалада немесе runbook-та ондаған нұсқадан тұратын қолмен жасалған тізімге айналдырудың қажеті жоқ. Қабылдау кезінде ноданың нақты техникалық паспортын жазып алып, оны релиз жазбасына тіркеңіз:

nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader
python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.get_device_name(0))"

Шығыс контейнер digest-імен және acceptance suite нәтижесімен бірге орналастыру журналына түсуі керек. Салыстыру жаңа кластер басқаша жауап бере бастағанда нақты не өзгергенін көрсетеді.

Кванттау да осы санатқа жатады. FP16, BF16, AWQ, GPTQ және басқа форматтар бір мінез-құлықтың бір-бірін алмастыратын көшірмелері емес. Олар логиттерді, жад тұтынуын, рұқсат етілген batch өлшемін және соңғы мәтінді өзгерте алады. Кванттау әдісін, конвертер нұсқасын, қолданылса калибрлеу жиынтығын, топтау параметрлерін және файл форматын көрсетіңіз. Екі модельді тек бастапқы checkpoint-і бірдей болғаны үшін бірдей деуге болмайды.

Қабылдау тестері таныс ақауларды ұстауы керек

Қолданба кодын өзгертпеңіз
base_url мәнін AI Router-ге ауыстырып, қолданыстағы SDK, код пен промпттарды өзгертпей пайдаланыңыз.

«Қазақстанның астанасы қандай?» деген бір сұрақ сервердің жұмыс істеп тұрғанын және модельдің анық фактіні білетінін тексереді. Бірақ жеткізілімнің дұрыстығы туралы дерлік ештеңе айтпайды. Жақсы тест жиынтығы шағын, бірақ әдейі қолайсыз кейстерден тұрады.

Бес санат дайындаңыз:

  • қатаң форматты талап ететін жүйелік нұсқау;
  • жауап алдыңғы ассистент репликасына тәуелді көпқадамды диалог;
  • Unicode, кириллица, қазақ таңбалары және аралас мәтін;
  • схема тексерілетін құрылымдалған JSON;
  • өнімде бар болса, құрал немесе RAG контексті бар сценарий.

Әр кейсті кіріс, күтілетін инварианттар және қажет болса эталон token ID немесе эталон мәтін ретінде сақтаңыз. Пакетке клиенттердің нақты сұрауларын салмаңыз. Синтетикалық мысалдар қауіпсіз: оларды кез келген контурға жіберуге, CI жүйесіне қосуға және инцидент кезінде талқылауға болады.

Бір тест мысалы:

{
  "id": "json_city_kz_01",
  "messages": [
    {"role": "system", "content": "Верни JSON с полем city. Без пояснений."},
    {"role": "user", "content": "Столица Казахстана?"}
  ],
  "generation": {
    "temperature": 0,
    "top_p": 1,
    "max_tokens": 32,
    "seed": 12345
  },
  "expect": {
    "json_schema": {
      "type": "object",
      "required": ["city"],
      "properties": {"city": {"type": "string"}},
      "additionalProperties": false
    },
    "rendered_prompt_sha256": "sha256:replace_me",
    "must_contain": ["Астана"]
  }
}

Мұнда rendered_prompt_sha256 модельге дейінгі жолды, яғни хабарламалар сериализациясын тексереді. JSON Schema мен must_contain шығуды тексереді. Тек промпт хеші бұзылса, CUDA талдауына бүкіл түнді жұмсаудың қажеті жоқ. Промпт хеші сәйкес келіп, JSON жарамсыз болса, генерация параметрлерін, қозғалтқышты және тоқтату шарттарын қараңыз.

Acceptance suite-ті тым осал етпеңіз. Барлық GPU-да генеративті модельден сөзбе-сөз бір абзацты талап ететін тест жалған дабыл тудырады. Кез келген бос емес мәтінді қабылдайтын тест ештеңені қорғамайды. Әр кейстің бір түсінікті мақсаты болсын: форматты сақтау, контексті ұстап тұру, дұрыс құралды шақыру, Unicode жоғалтпау немесе рұқсат етілген шектен аспау.

Жаңа нодаға көшіруді релиз ретінде өткізіңіз

Модельге дейінгі жолды қысқартыңыз
AI Router төмен кідіріс қажет командалар үшін open-weight модельдерді орналастырады.

Каталогты SSH арқылы қолмен көшіру өзгерістер тарихының бір адамның жадында қалуына әкеледі. Бүгін бәрі жұмыс істегенімен, ертең бумада екінші tokenizer-дің қайдан пайда болғанын немесе бір нода неге басқа конфигурация файлын алғанын ешкім айта алмайды.

Жұмыс процедурасы мынадай:

  1. Жинақтау ортасы бастапқы артефакттардың нақты ревизиясын бос каталогқа алып, оны манифестке жазады.
  2. Скрипт рұқсат етілген файлдарды таңдап, қайталанатын форматтардың жоқтығын тексереді, SHA256 есептейді және SHA256SUMS файлын жасайды.
  3. Бөлек процесс тестерді жасайды немесе жаңартады, құрылған промпттардың хештерін есептейді және оларды эталон ортада іске қосады.
  4. Пакет, манифест, қолтаңба және тест жиынтығы өзгермейтін релиздер қоймасына түседі.
  5. Жаңа нода пакет алып, қолтаңбалар мен бақылау қосындыларын тексереді, контейнерді көрсетілген параметрлермен іске қосады, содан кейін балансировкалау жүйесіне қосылмай тұрып acceptance suite орындайды.

Төртінші қадамдағы ең жағымсыз қате, файлдарды сол жол бойынша ауыстыру мүмкіндігі. Объектілік қойма models/prod/current файлын қайта жазуға рұқсат етсе, сіз релиз емес, сілтеме жасадыңыз. Пакет жолында өзгермейтін нұсқа немесе манифест хеші болуы керек. Мақұлданған релизге сілтемені бөлек сақтауға болады, бірақ ол ақиқаттың жалғыз көзі болмауы тиіс.

Бірнеше модельді бағыттау кезінде бұл тәсіл тағы бір практикалық нәтиже береді. AI Router-ді OpenAI-мен үйлесімді қолжетімділік қабаты ретінде пайдалануға болады, бірақ сұраудағы модель идентификаторы assistant_prod сияқты түсініксіз атауға емес, нақты мақұлданған пакетке сілтеме жасауы керек. Әйтпесе ноданы немесе модельдің жергілікті нұсқасын ауыстыру клиент үшін мінез-құлықтың түсініксіз өзгерісіне айналады.

Пайдалы пакетті авторсыз қалпына келтіруге болады

Тексеру қарапайым әрі жағымсыз: жинақтауға қатыспаған инженерге пакетті беріп, оны таза нодада іске қосуды сұраңыз. Ауызша кеңес бермеңіз, мессенджер арқылы «кішкентай түзету» жібермеңіз және қабылдау аяқталғанша файлдарды өзгертуге рұқсат етпеңіз.

Бұл инженер әр кезеңде түсінікті нәтиже алуы керек: қандай файлдар орнатылды, қандай хештер тексерілді, қандай образ іске қосылды, қай шаблон қолданылды, қандай тестер өтті, GPU паспорты қайда орналасқан. Егер ол «мұнда қай tokenizer дұрыс?» деген сұраққа тірелсе, релиз аяқталмаған.

Салмақтары бар әдемі бумаға ұмтылмаңыз. Өзінің шығу тегін дәлелдейтін, орындалу ортасын сипаттайтын және трафик жаңа ноданы көрмей тұрып мінез-құлықтың өзгерісін анықтайтын пакет жасаңыз. Сонда GPU көшіру қауіпті операция болудан қалып, кәдімгі релиз процедурасына айналады.

Жиі қойылатын сұрақтар

LLM-ді жаңа GPU серверіне толық көшіру үшін қандай файлдар қажет?

Модельдің салмағы, токенизатордың барлық файлдары, модель конфигурациясы, чат шаблоны, генерация ережелері, рантайм нұсқасы және бекітілген тест сұраулары қажет. Осы элементтердің біреуі жетіспесе де, нода модельді жүктеп, басқаша жауап беруі мүмкін.

Модельді қайталанымды орналастыру үшін SHA256 жеткілікті ме?

Жоқ. SHA256 файл байттарының өзгермегенін дәлелдейді, бірақ генерация параметрлері, хабарламалар шаблоны және қозғалтқыш нұсқасы дәл сол күйде іске қосылғанын растамайды. Бақылау қосындылары қажет, бірақ олар тек файлдардың тұтастығын тексереді.

chat template модель жауаптарына неге әсер етеді?

Өйткені олар декодер іске қосылғанға дейінгі токендер жолын өзгертеді. Әртүрлі шаблондарда бірдей хабарламалар JSON-ы басқа жүйелік префикс, рөл маркері немесе жауаптың басталу белгісін алуы мүмкін. Осыдан кейін мәтіннің дәлме-дәл бірдей болуын күтуге болмайды.

Бір LLM әртүрлі GPU-да әрдайым бірдей мәтін шығара ма?

Жоқ, егер бірдейлік мәтіннің байт бойынша дәл келуін білдірсе. Әртүрлі GPU, CUDA нұсқалары, attention кітапханалары және кванттау режимдері қалқымалы нүктелі есептеулерді өзгертуі мүмкін. Маңызды сценарийлер үшін практикалық келісімді алдын ала белгілеңіз: жауап құрылымы, міндетті өрістер және бақылау тесттерінің нәтижелері сәйкес болуы керек.

LLM шығаруын детерминистік етуге бола ма?

Температура 0 болуы керек, top_p 1-ге тең қойылады, ал кездейсоқ сандар генераторы токен таңдауына қатыспауы тиіс. Бірақ мұндай режимнің өзі сандық іске асыру мен рантаймның жасырын параметрлерінен туатын айырмашылықтарды жоймайды. Сондықтан бір ғана temperature параметріне сенбей, нәтижені таза нодада тексеріңіз.

Модельді тек latest немесе main тегімен бекітуге бола ма?

Сынақ үшін өзгермелі тег ыңғайлы, ал релиз үшін жарамсыз. Ол кодты өзгертпей-ақ салмақтардың, токенизатордың немесе README файлының жаңа ревизиясына сілтеме жасауы мүмкін. Манифестте өзгермейтін ревизия идентификаторын және пакет алынғаннан кейінгі файлдардың жеке SHA256 мәндерін сақтаңыз.

Генерация параметрлері өзгерсе, пакет нұсқасын ауыстыру керек пе?

Иә, егер бір салмақтар жиынтығы үшін генерация режимін, шаблонды немесе рантаймды өзгертсеңіз. Бұл жай ғана косметикалық өзгеріс емес: клиент үшін мұндай нұсқа өзін басқа модель сияқты ұстауы мүмкін. Пакет нөмірінде артефакттар ревизиясы мен шығару келісімшартының ревизиясын бөлек көрсетіңіз.

Модель салмақтарынан бөлек контейнерде нені бекіту керек?

Жинаққа образ хешін немесе пакеттердің нақты нұсқаларының тізімін, драйвер нұсқасын, CUDA нұсқасын, GPU туралы мәліметті және іске қосу командасын енгізіңіз. Контейнер пайдаланушы кеңістігіндегі айырмашылықты азайтады, бірақ драйвер мен аппараттық үйлесімділікті тексеруді алмастырмайды. NVIDIA CUDA мен драйвер нұсқалары арасындағы үйлесімділіктің шектеулері бар екенін нақты көрсетеді.

Модель пакетінде клиенттердің нақты промпттарын сақтауға бола ма?

Пакетте пайдаланушылардың диалогтары, сұрау көшірмелері немесе сақтау қоймасына кіру құпиялары болмауы керек. Оның ішінде синтетикалық тестер мен жауаптың күтілетін жасырын қасиеттері ғана сақталады. Нақты өндірістік мысал қажет болса, оны бөлек қорғалған жинақта сақтап, рөлге қарай қолжетімділік беріңіз.

Модельдер қазір қолмен көшірілсе, неден бастау керек?

Алдымен артефакттар қоймасын іске қосу тәсілінен бөліңіз. Содан кейін манифест қосып, SHA256 есептеңіз, бірнеше бақылау диалогын дайындап, оларды таза нодада іске қосыңыз. Егер бұл тексерісті қолмен түзетусіз қайталау мүмкін болмаса, пакет релизге әлі дайын емес.