Ruka hadi maudhui makuu
Mafunzo ya AI

Sambaza na Utumie OpenJev kwa Uainishaji wa Tokeni Moja ukitumia SGLang

Jifunze jinsi ya kusambaza openjev-sglang kwenye Modal, kuwasilisha tathmini za Noul, Choice na Score, kukagua hali ya huduma, kusanidi vikomo na uthibitishaji, na kuunganisha API na backend iliyopo ya SGLang.

Sambaza na Utumie OpenJev kwa Uainishaji wa Tokeni Moja ukitumia SGLang

openjev-sglang ni nini?

openjev-sglang ni seva inayotekeleza API ya HTTP ya TypeSafe/Jev kwa kutumia Qwen3.6-35B-A3B kwenye SGLang. Inabadilisha maswali ya uainishaji kuwa usomaji bora wa uwezekano wa tokeni ya kwanza badala ya kuzalisha majibu marefu.

Usambazaji chaguomsingi huendesha kontena moja ya SGLang kwa kila GPU ya NVIDIA B200. SGLang 0.5.19 hutoa frontend yake ya Rust, uhifadhi wa radix, na grafu za CUDA za prefill zinazoweza kukatizwa. Mchakato tofauti wa Python hushughulikia API ya umma kwa FastAPI, uvloop, tokeniza ya Hugging Face inayotumia Rust, na miunganisho ya pamoja ya asincroni kwa SGLang kwenye localhost.

Hakuna maombi yanayotumwa kwa TypeSafe. Endpoint ya umma hutoa API ya tathmini, huku njia za uzalishaji na usimamizi za SGLang zikibaki za faragha kwenye localhost.

Vipengele muhimu

  • Aina tatu za tathmini: Noul kwa uwezekano wa ndiyo/hapana, Choice kwa uteuzi wa kategoria, na Score kwa viwango vilivyopangwa.
  • Uelekezaji wa tokeni moja: kila swali hutathminiwa kwa uwezekano wa logi wa lebo za majibu bila kuzalisha mfuatano wa mawazo.
  • Uhifadhi wa kiambishi awali kilichoshirikiwa: kiambishi awali cha pamoja cha prompt huandaliwa kabla ya matawi ya maswali kuendeshwa kwa wakati mmoja.
  • Hadi maswali 64: maswali ya Choice na Score yanaunga mkono majibu kati ya 2 na 64 kwa chaguomsingi.
  • Hali yenye muundo: hali na maagizo yanaweza kuwa mifuatano, vitu vya JSON, au safu.
  • Endpoint za uendeshaji: afya, uhai, katalogi ya modeli, vikomo, schema ya OpenAPI, Swagger UI, na marejeo shirikishi ya Scalar vimejumuishwa.
  • Usambazaji wa Modal: programu iliyotolewa inaauni kuongeza kiotomatiki, akiba za kudumu za modeli, urejeshaji wakati wa kuanza, na tabia ya scale-to-zero.
  • Ulinzi unaoweza kusanidiwa: vikomo vya maombi, vidhibiti vya wakati mmoja, muda wa kusubiri, na uthibitishaji wa hiari wa Bearer vinapatikana.

Mahitaji ya awali

Sakinisha uv na upate akaunti ya Modal ikiwa unapanga kutumia usambazaji wa wingu uliotolewa. Ujenzi wa kwanza huleta picha kubwa ya SGLang, na uanzishaji wa kwanza wa GPU hupakua uzani wa modeli na kukusanya au kunasa kernel.

Vitegemezi vya CUDA hubaki kwenye kontena la SGLang. Kuendesha uv sync kwenye workstation yako husakinisha API, zana za usambazaji, na majaribio pekee.

Sakinisha mradi

Clone hazina, ingia kwenye saraka yake, kisha sawazisha mazingira ya Python:

uv sync

Ikiwa Modal haijaidhinishwa kwenye mashine ya sasa, kamilisha usanidi wake:

uv run modal setup

Endesha usambazaji wa muda wa Modal

Kwa jaribio la kutoka mwanzo hadi mwisho, anzisha seva ya muda, endesha ukaguzi wa uelekezaji uliojumuishwa, kisha izime seva baadaye:

uv run modal run modal_app.py

Amri hii huhifadhi ripoti ya smoke test kama smoke-result.json. Ripoti hiyo inajumuisha muda wa kusubiri uanzishaji, ucheleweshaji wa uelekezaji, na maelezo yanayopatikana kuhusu matumizi ya akiba.

Usambaze endpoint thabiti

Usambaze programu kama huduma endelevu ya Modal:

uv run modal deploy modal_app.py

Usambazaji utaonyesha URL inayofanana na https://YOUR-SERVER.us-west.modal.direct. Ihifadhi katika kigezo cha mazingira kwa ufikiaji rahisi:

export OPENJEV_URL="https://YOUR-SERVER.us-west.modal.direct"

Endpoint chaguomsingi ya Modal haina uthibitishaji kwa makusudi. Inatumia eneo la uelekezaji la US West na inaweza kuratibu rasilimali za kompyuta katika maeneo ya US yaliyosanidiwa. Hakuna kikomo dhahiri cha kontena, na matukio hupunguzwa hadi sifuri baada ya dakika tano za kutotumika.

Seva iliyopunguzwa hadi sifuri hurudisha HTTP 503 wakati inaanza. Amri ya smoke iliyojumuishwa hujaribu tena majibu haya ya uanzishaji kiotomatiki.

Endesha smoke test dhidi ya URL iliyosambazwa:

uv run openjev smoke "$OPENJEV_URL"

Smoke test hujaribu aina zote tatu za majibu, hukagua swali lenye majibu 64, hufanya ukaguzi wa msingi wa maana, na kuthibitisha kuwa majibu 65 yanakataliwa.

Wasilisha tathmini yako ya kwanza

Njia kuu ni POST /v1/systemone. Ombi lifuatalo linaainisha ujumbe wa mteja kwa maswali ya Noul, Choice, na Score:

curl "$OPENJEV_URL/v1/systemone" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "jev-latest",
    "state": [
      {"role": "system", "content": "You are a support assistant."},
      {"role": "user", "content": "I was charged twice. Please refund the duplicate."}
    ],
    "questions": {
      "refund": {
        "type": "noul",
        "instructions": "Does the user request a refund?"
      },
      "department": {
        "type": "choice",
        "instructions": "Which department should handle this?",
        "criteria": {
          "billing": "Payments and refunds",
          "technical": "Software bugs"
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "How urgent is the request?",
        "criteria": ["Routine", "Urgent", "Emergency"]
      }
    }
  }'

Pia unaweza kuweka JSON kwenye faili na kuiwasilisha bila kunukuu kwa shell:

curl "$OPENJEV_URL/v1/systemone" \
  -H 'Content-Type: application/json' \
  --data-binary @examples/request.json

Kuelewa aina za maswali

  • Noul: hurudisha uwezekano uliorekebishwa wa yes.
  • Choice: hurudisha chaguo lenye uwezekano mkubwa zaidi na mgawanyo kamili wa uwezekano. Majina ya awali ya chaguo huhifadhiwa kwenye jibu.
  • Score: hurudisha kiwango kinachotarajiwa chenye msingi wa sifuri, kilichokokotolewa kwa kutumia faharasa ya kila kiwango na uwezekano wake, pamoja na ufafanuzi.

Chaguo za uchaguzi huwasilishwa kwa modeli kama lebo za herufi zinazofuatwa na maelezo. Funguo za majibu kwa kawaida hufichwa kutoka kwa modeli. Ikiwa maelezo ya chaguo ni null, ufunguo wake hutoa maana badala yake.

Kutoa hali na maagizo

state na instructions zote zinakubali mifuatano ya maandishi, vitu vya JSON, au safu. Orodha ya ujumbe wa mazungumzo, au kitu kilicho na {"messages": [...]} pekee, huwasilishwa kwa kutumia kiolezo asilia cha mazungumzo cha modeli.

Majukumu na vitu asilia vya ujumbe huhifadhiwa, na kila swali la uainishaji huongezwa kama zamu nyingine ya mtumiaji. Thamani nyingine zilizopangwa hubadilishwa kuwa mfuatano kamili ndani ya ujumbe wa mtumiaji. Kitu kilicho na messages pamoja na sehemu nyingine pia huhifadhiwa ili metadata isiondolewe kimya kimya.

Hali ya mazungumzo inatumia maudhui ya maandishi pekee. Maudhui ya picha, sauti na video hayatumiki.

Kuchunguza sehemu za mwisho za huduma

  • POST /v1/systemone hufanya tathmini za Noul, Choice na Score.
  • GET /v1/models hurejesha katalogi ya modeli yenye sehemu za TypeSafe na za mtindo wa OpenAI.
  • GET /v1/limits huripoti vikomo vya kupokea maombi.
  • GET /health huripoti utayari, hali ya SGLang na muda wa kuanzisha huduma.
  • GET /health/live hukagua ikiwa mchakato wa API bado unaendelea.
  • GET / hufungua marejeleo ya Scalar API yenye mfano wa ombi unaoweza kuhaririwa.
  • GET /docs hufungua Swagger UI iliyojengewa ndani.
  • GET /openapi.json hurejesha schema ya OpenAPI iliyozalishwa.

Jina la modeli ya ombi jev-latest ni jina mbadala la uoanifu. Kitambulisho chaguo-msingi cha modeli ya umma ni Qwen/Qwen3.6-35B-A3B, huku hazina ya NVIDIA ikitumika ndani kama chanzo cha uzani.

Jinsi uelekezaji unavyofanya kazi

  1. API huthibitisha schema, idadi ya majibu, ukubwa wa mwili, urefu wa muktadha na bajeti ya jumla ya tokeni.
  2. Huunda kiolezo asilia cha mazungumzo mara moja bila kuwezesha kufikiri, kisha hutenganisha kiambishi awali cha pamoja na viambishi tamati vya maswali vilivyowekwa tokeni kivyake.
  3. Hutuma kiambishi awali cha pamoja kwa SGLang ikiwa na max_new_tokens=1. Tokeni iliyochaguliwa hutupiliwa mbali, na hivyo kuacha kiambishi awali kipatikane kwa matumizi ya hiari tena ya akiba ya radix.
  4. Huwasilisha kwa wakati mmoja tawi moja kwa kila swali. Kila tawi lina kiambishi awali, kiambishi tamati cha swali, kichwa cha msaidizi na alama ya Answer:.
  5. Huomba uwezekano wa kumbukumbu kwa lebo halali za majibu pekee na kuupanga upya kwa kutumia softmax thabiti.

Kwa maswali N, seva hufanya miito ya tokeni moja N + 1: mwito mmoja wa kupasha akiba na mwito mmoja kwa kila swali. Tokeni iliyozalishwa hupuuzwa, kwa hiyo hakuna mwendelezo wa autoregressive wala msururu wa mawazo unaozalishwa. Usimbaji wa kubashiri haujawezeshwa.

Lebo huanzia A hadi Z, kisha hutumia michanganyiko ya herufi ya tokeni moja iliyothibitishwa kama AA na AB. Lebo zote 64 hukaguliwa kwa kutumia tokenizer inayotumika wakati wa kuanzisha huduma. Hii huepusha kutumia lebo za nambari zenye tokeni nyingi kama 10 au 64.

Kuelewa matumizi na vipimo vya akiba

Kichwa cha jibu x-openjev-prefix-tokens huripoti ukubwa wa kiambishi awali cha pamoja kilichoombwa. SGLang inapotoa hesabu za akiba, x-openjev-cached-tokens huwa na jumla ya miitiko ya akiba ya matawi.

Frontend ya Rust ya SGLang 0.5.19 haitoi hesabu hizo za akiba. Katika usanidi huo, kichwa hakipo na ripoti ya smoke huweka null, si sifuri. Kumbukumbu za kipangaji bado zinaweza kuonyesha miitiko halisi ya akiba. Kichwa cha Server-Timing hutenganisha utayarishaji wa prompt, prefill ya pamoja na uelekezaji wa matawi.

usage.input_tokens ni jumla ya hesabu kamili za prompt zilizoripotiwa katika miito ya kupasha akiba na ya matawi, ikijumuisha tokeni zilizohifadhiwa kwenye akiba. usage.output_tokens ni N + 1. Takwimu hizi zinaeleza shughuli za backend badala ya tokeni za kipekee zilizokokotwa au makadirio ya bili ya TypeSafe.

Kusanidi vikomo na uthibitishaji

Vikomo chaguo-msingi vya kupokea maombi vinajumuisha maswali 64, majibu 2 hadi 64 kwa kila swali la Choice au Score, mwili wa JSON wa MiB 2, tokeni 32,768 kwa kila tawi ikijumuisha matokeo, tokeni 262,144 za jumla ya ingizo lililowasilishwa, tathmini 16 zinazoendelea kwa wakati mmoja na miito 64 ya backend inayoendelea kwa wakati mmoja.

Maombi yasiyo halali hurejesha HTTP 422 kabla ya uelekezaji. Miili inayozidi kikomo cha ukubwa hurejesha 413, mzigo kupita kiasi hurejesha 529 pamoja na Retry-After, na muda wa backend kuisha hurejesha 504. Tathmini zilizoshindwa au zilizoghairiwa hughairi matawi mengine na kujaribu kuyasitisha katika SGLang.

Usanidi unapatikana kupitia vigezo vya mazingira vya OPENJEV_*. Mipangilio ya kawaida inajumuisha:

  • OPENJEV_MODEL: chaguo-msingi ni nvidia/Qwen3.6-35B-A3B-NVFP4.
  • OPENJEV_SERVED_MODEL_NAME: hubadilisha kitambulisho cha umma cha modeli na hupitishwa kwa SGLang.
  • OPENJEV_REVISION: huchagua marekebisho ya checkpoint yaliyobandikwa.
  • OPENJEV_FRONTEND: chaguo-msingi ni rust; python ni njia mbadala ya wazi.
  • OPENJEV_MAX_INPUT_TOKENS: chaguo-msingi ni 32768.
  • OPENJEV_MAX_TOTAL_INPUT_TOKENS: chaguo-msingi ni 262144.
  • OPENJEV_MAX_CONCURRENT_REQUESTS: chaguo-msingi ni 16.
  • OPENJEV_MAX_CONCURRENT_BRANCHES: chaguo-msingi ni 64.
  • OPENJEV_REQUEST_TIMEOUT: chaguo-msingi ni sekunde 120.
  • OPENJEV_TEMPERATURE: chaguo-msingi ni 1.0 na huathiri urekebishaji wa lebo.
  • OPENJEV_API_KEY: huwezesha uthibitishaji wa hiari wa Bearer kwa API ya umma.
  • OPENJEV_BACKEND_API_KEY: husanidi ufunguo tofauti wa hiari wa Bearer kwa SGLang.

Kizindua Modal husambaza kiotomatiki OPENJEV_PROFILE, OPENJEV_FRONTEND, na OPENJEV_SERVED_MODEL_NAME kutoka kwenye mazingira ya ndani. Ongeza mipangilio mingine ya mbali kwenye image.env(...), au tumia Modal Secret kwa vitambulisho vya kuingia.

Endesha ndani kwa kutumia backend iliyopo ya SGLang

Ili kutumia backend ambayo tayari inaendeshwa, elekeza API kwenye URL yake ya ndani:

uv run openjev serve --connect http://127.0.0.1:30000

Backend lazima itumie marekebisho yanayolingana ya modeli na tokenizer. Pia lazima iauni uwezekano wa log wa tokeni zilizochaguliwa, uhifadhi wa radix, na urefu wa kutosha wa muktadha.

Kwenye mwenyeji au kontena ya B200 ambako SGLang 0.5.19 imesakinishwa katika mazingira tofauti ya Python, bainisha mkalimani wake wazi:

uv run openjev serve --sglang-python /path/to/sglang/bin/python

Uendelezaji na uthibitishaji

Tumia amri zilizojumuishwa kuendesha majaribio ya nje ya mtandao, ukaguzi wa ujumuishaji wa tokenizer, linting, na uzalishaji wa schema:

uv run pytest
uv run pytest -m integration
uv run ruff check .
uv run openjev schema

Majaribio ya kawaida hushughulikia tabia ya vitengo na API nje ya mtandao. Majaribio ya ujumuishaji hutumia tokenizer halisi na upakuaji mdogo kutoka Hugging Face, lakini hayahitaji GPU. Uzalishaji wa schema pia hauhitaji GPU wala upakuaji wa modeli.

Vidokezo vya uwekaji wa hali ya juu

Weka kontena ya GPU ikiwa tayari

Modal hupunguza huduma hadi sifuri baada ya dakika tano za kutotumika. Weka min_containers=1 katika modal_app.py wakati ucheleweshaji mdogo wa kuanza kila mara ni muhimu zaidi kuliko kuepuka matumizi ya GPU isiyotumika.

Tarajia uanzishaji wa kwanza

Uanzishaji wa kwanza wa GPU hupakua uzani na hukompile au kunasa kernel. Uzani wa modeli, data ya urekebishaji ya SGLang, na data ya ucompilation ya Triton hudumu katika Modal Volume ya openjev-huggingface. Uanzishaji unaofuata hutumia tena faili hizo, ingawa unakili wa grafu ya CUDA bado hufanyika wakati wa kuanza.

Tumia tena akiba kwa fursa

Utumiaji tena wa Radix si sesheni ya KV iliyobandikwa kwa kila ombi. Hali inayojirudia katika modeli mseto ya Qwen, mipaka ya kurasa za akiba, shinikizo la akiba, na trafiki sambamba vinaweza kupunguza mafanikio. Backend hutumia --mamba-radix-cache-strategy extra_buffer.

Tafsiri uaminifu kwa uangalifu

OpenJev hufafanua uaminifu kama 1 - H(probabilities) / log(number_of_options), uliowekewa kikomo kati ya sifuri na moja. Uwezekano unaofanana hutoa uaminifu wa sifuri, ilhali uwezekano uliokolea kwenye chaguo moja hutoa moja.

Uwezekano huu umewekewa masharti na chaguo zilizotolewa na unaweza kutegemea maneno ya kidokezo na mpangilio wa lebo. Si makadirio yaliyosawazishwa ya usahihi.

Jipange kwa hitilafu ya backend

SGLang ikitoka bila kutarajiwa, API pia hutoka. Kizindua cha Modal kisha husitisha kontena ili Modal iweze kulibadilisha badala ya kuacha mchakato wa HTTP wa umma ukiwa umeunganishwa na backend ya uelekezaji iliyokufa. Kuzima kwa kawaida huzima wachunguzi wote kwa usafi.

Hitimisho

openjev-sglang hutoa njia iliyolenga ya kuendesha uainishaji unaoendana na Jev kwenye Qwen3.6 kwa usomaji bora wa uwezekano wa tokeni moja. Usanidi wake wa Modal hutoa uwekaji wa B200 unaoweza kupanuka, huku amri zake za ndani zikiwezesha majaribio na kuunganisha huduma iliyopo ya SGLang. Anza na jaribio la smoke, thibitisha mipaka na mipangilio ya uthibitishaji, na fuatilia muda na vichwa vya akiba trafiki inapoongezeka.