Big Language Models (LLMs) нь өдөр тутмын апп-ээс дэвшилтэт хэрэгслүүдээс. Тэднийг ашиглах нь хялбар юм. Гэхдээ та өөрийн загварыг ажиллуулах хэрэгтэй бол юу вэ? Хэрэв та өөр өөр өөр загварыг тохируулж байгаа уу, эсвэл хувийн найдвартай өгөгдлийг ажиллуулж байгаа эсэхийг хүсч байгаа эсэхийг үзэж байгаа эсэхийг нэмэгдэж байна. Энэ бичлэгдэд бид өөрсдийн LLM-ийн түлхүүр систем бий болгох үед оюутнуудыг хуваалцах болно. Бид хадгалах, ашиглах загварыг хамарна, үйлчилгээний архитекторын зураг төсөл, routing, streaming, microservices-ийн удирдлага гэх мэт бодит асуултуудыг шийдэх болно. Энэ үйл явц нь асуултуудтай байсан боловч эцэст нь бид найдвартай Үйлчилгээ LLMs нь чатботоос, ажлын үйл явц агентлаас ухаалаг автоматжуулалтын хэрэгслүүдээс өргөн хүрээний хэрэглээг дэмждэг. Хэрэглээний олборлолт, хэрэгсэл зовох, олон агентлын протоколууд нь чухал боловч тэд үндсэн хөдөлгүүрээс дээш түвшинд ажилладаг: үндсэн LLM. Олон төслүүд нь гадаад ханган нийлүүлэгчдэд хамаарна, гэх мэт Нөхцөл эсвэл , Энэ нь ихэвчлэн хэрэглээний тохиолдолд хялбар юм. Гэхдээ зарим хэрэглээнд энэ нь хурдан асуудал болж байна. Хэрэв ханган нийлүүлэгч буцаж байгаа бол юу вэ? Хэрэв та латент, үнэ төлбөр, эсвэл тавтай морилно уу? Хамгийн чухал нь - Хэрэв та нарийвчлалтай бөгөөд хэрэглэгчийн өгөгдлийг гуравдаггүй бол юу вэ? Зөвлөгөө Өнгөрсөн Антропологийн Зөвлөгөө Өнгөрсөн Антропологийн Энэ нь тусгай хостинг чухал болж байна. өмнөх сургалттай эсвэл тохирсон загвар үйлчилгээ нь хяналт, аюулгүй байдал, загвар тусгай бизнесийн хэрэгцээг тохирсон боломжийг олгодог. Тавтай морилно уу, маш их баг, маш их эрчим хүчний хэрэгцээг шаарддаггүй. Бид хязгаарлагдмал зардал, бага баг, зөвхөн хэд хэдэн зүрхүүдтэй бий болгосон. Эдгээр хязгаарлалт бидний архитекторын шийдлийг нөлөөлж, практик, үр ашигтай талаар анхаарлаа шаарддаг. Дараагийн хэсэгт бид ачаалалтай асуултуудыг хамарна, шийдлүүд гүйцэтгэсэн, арга зам хооронд оюутнуудыг хамарна. Бүртгүүлэх Эдгээр нь системын баруун үүсгэдэг үндсэн компонент юм. Formats and Encoding. Тавтай морилно уу, тавтай морилно уу, тавтай морилно уу, тавтай морилно уу, тавтай морилно уу. Streaming болон Routing. Олон загварууд, хүсэл төрөл, хост эх үүсвэрийг ажиллуулахын тулд нарийвчлалтай маршрутизацийн шийдлийг шаарддаг. Бид хэрэглэгчийн хүсэлтийг систем хооронд - эхний эх үүсвэрийг эх үүсвэрийг тохиромжтой ажилчдын түдгэлзүүлсэн нь - хэрхэн маршрутизаж, хариу нь хэрхэн дамжуулах болно. Загварын хадгалах, ашиглах. Моделийн амьдрал, үйлдвэрлэлийн хэрэглээнд хэрхэн зориулагдсан вэ? Тавтай морилно уу. Бид загварын найдвартай байдлыг хангахын тулд хооронд хийсэн гол туршилтын талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи. Нарийвчлал. Хэрэв та зүйлийг ажилладаг гэж мэдэх вэ? Бид ямар ч метрикуудыг харахыг харуулж байна, бид хязгаарлалыг хэрхэн хянахын тулд, системийн эрүүл мэнд, найдвартай байдлыг хангахын тулд ашигладаг зүрхүүд. Schema and Data Encoding Үйлчилгээний хувьд тохиромжтой системийг сонгох нь чухал юм. Үйлчилгээний хооронд хуваалцсан формат нь интеграцийг хялбарч, алдааг багасгаж, адаптацийг сайжруулдаг. Бид системийг өөрсдийн хостинг загварууд болон гадаадын ханган нийлүүлэгчдэд шууд ажиллуулахын тулд загваруулсан байна. Заасны загвар нь чухал There’s no universal standard for LLM data exchange. Many providers follow schemas similar to , бусад - гэх мэт эсвэл — тэсвэртэй боловч чухал янз бүрийн танилцуулах. Эдгээр ханган нийлүүлэгчдийн олон нь OpenAI-д нийцтэй SDK-ийг санал болгож байна. Энэ нь хэзээ ч хязгаарлалттай, эсвэл хязгаарлагдмал шинж чанарыг (жишээ нь, Нөхцөл ) Үүнээс гадна бусад төсөл OpenAI-д нийцтэй интерфэйс дээр ихээхэн хавтан нь эдгээр хувилбар нь нэгтгэх зорилготой юм. Зөвлөгөө Клод Gemini Anthropic-ийн OpenAI-д нийцтэй SDK Gemini-ийн OpenAI Compatibility Layer OpenRouter Зөвлөгөө Клод Gemini Anthropic-ийн OpenAI-д нийцтэй SDK Gemini-ийн OpenAI Compatibility Layer OpenRouter Нэг predefined ханган нийлүүлэгчийн схемуудтай байлгах нь тэдний ашигтай байдаг: Та сайн шалгаж, тогтвортой API авах болно. Та одоогийн SDK болон хэрэгсэл дээр итгэж болно. Гэсэн хэдий ч, энэ нь тавтай морилно уу: Энэ нь ханган нийлүүлэгч зам үүсгэдэг бөгөөд олон ханган нийлүүлэгч дэмждэг. Энэ нь бизнесийн хэрэгцээ, мэдээллийн шинжлэх ухааны багцын шаардлагад зориулсан өөрчлөн шинж чанарыг шилжүүлэх гүнзгий хязгаарлагдмал юм. Та өөрийн хяналтын аль хэдийн өөр өөрчилж, эсвэл ачаалалтай байх болно. Эдгээр схем нь ихэвчлэн насанд хүрэгчдийн хяналтыг хязгаарлагч байдаг. Эдүүлбэр нь, бид үүнийг тодорхойлохыг сонгоно — Бидний хэрэгцээг хамарсан схемууд, бид дараа нь шаардлагатай үед өөр өөр өөр өөр хэлбэрээр хуваалцах боломжтой. own internal data model Internal Schema Design Хэдийгээр асуултуудыг шийдэхийн өмнө, бид асуудал тодорхойлох, шийдэл нь бидний хүсэлтийг тодорхойлох: Хязгаарлагдмал конвертын формат нь гадаад ханган нийлүүлэгчдэд шаарддаг. Бизнесийн болон өгөгдлийн шинжлэх ухааны багтай онцлог функцийг бүрэн дэмждэг. Схемийг идэвхтэй хэрэгцээг хангахын тулд хялбар өргөтгөлж болно. Бид хамгийн том LLM схемуудыг үзүүлэхийн тулд ханган нийлүүлэгчдийн хэлбэрийг, параметрүүд, outputs хэрхэн структурийг ойлгохын тулд эхэлсэн. хамгийн их системд тохиромжтой, гэх мэт: core domain entities Сэтгэгдэл (жишээ нь, хурдан, түүх) Бүтээгдэхүүний параметрүүд (жишээ нь температур, top_p, beam_search) Бид зарим параметрүүд, жишээ нь Нөхцөл эсвэл , нийлүүлэгчдийн дотоодын конфигураци, бизнесийн логик тусгай гэж. Эдгээр элементүүд нь үндсэн LLM домонд гадна байдаг бөгөөд хуваалцсан схемуудын нэг хэсэг биш юм. Үнэндээ, тэд сонголттай өргөтгөл болгон ач холбогдолтой байдаг. Хэрэв функцийг өргөн хэрэглэдэг эсвэл шилдэг интероперабэлтийн хэрэгцээтэй байхыг хүсч байгаа бол бид энэ нь үндсэн схемуд нэгтгэхийг үнэлэх болно. service_tier usage_metadata reasoning_mode Өндөр түвшинд, бидний эх сурвалж схемууд энэ гол бүрэлдэхүүн хэсгүүд нь структуригдсан байна: Модел — Routing key гэж ашиглаж, Routing Identifier гэж ажилладаг, системийн хүсэлт нь тохиромжтой ажилчдын нодоо руу дамжуулах боломжийг олгодог. Generation Parameters — Core загвар тохиргоо (жишээ нь, температур, top_p, max_tokens). Тавтай морилно уу, Тавтай морилно уу! Тоног төхөөрөмж — загварыг ашиглах боломжтой тоног төхөөрөмжийн тодорхойлолт. Энэ нь бидний дараах загвартай, а формат. Энэ нь загварын бүтэц, зорилго илрүүлдэг, гэхдээ зарим имплементацийн тодорхойлолт нь хялбарчлалтай байхыг хүсч байна. Pydantic-like Pydantic-like class ChatCompletionRequest(BaseModel): model: str # Routing key to select the appropriate model or service messages: list[Message] # Prompt and dialogue history generation_parameters: GenerationParameters # Core generation settings tools: list[Tool] # Optional tool defenitions class GenerationParameters(BaseModel): temperature: float top_p: float max_tokens: int beam_search: BeamSearchParams # Optional, non-core fields specific to certain providers provider_extensions: dict[str, Any] = {} ... # Other parameters Бид нарийвчлалтай генерацийн параметрүүд нь өөр өөр бүрийн тоноглогдсон салбарт байрлуулахын тулд ихэнх нь зүрхний түвшинд байрлуулах. Энэ дизайн сонголт нь өөрчилж байна параметрүүд (жишээ нь температур, top-p, загварын тохиргоо) болон Компонент (жишээ нь, мэдээ, хэрэгсэл). Манай байгаль орчинд олон баг нь эдгээр тогтвортой параметрүүд нь гадааны конфигурацийн системд хадгалах, энэ хуваалцах нь практик, шаардлагатай юм. constant variable We include an additional field called Үүнээс гадна Эдгээр параметрүүд янз бүрийн LLM-ийн ханган нийлүүлэгчдэд маш их өөрчлөн байдаг, Эдгээр талбайн баталгаажуулалт, интерпретаци —Компонент нь тодорхой загварын ханган нийлүүлэгчтэй харилцаа холбооны талаар мэддэг. Тиймээс бид олон үйлчилгээнд давуу талтай өгөгдлийн баталгаажуулалтыг үүсгэсэн хязгааргүй дамжуулалтыг бууруулж байна. provider_extensions GenerationParameters delegated to the final module that handles model inference Өнгөрсөн kompatibility баталгаажуулахын тулд шинэ output schema онцлог ЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭдүүлбэрЭд explicit, optional fields Эдгээр схем нь хуваалцсан Python библиотек дээр хадгаласан бөгөөд үйлчилгээнд харьцуулахад асуултууд, асуултууд хяналтыг хангахын тулд ашиглаж байна. Гурав дахь нийлүүлэгчдэд хамтран ажиллах Бид өөрсдийн платформ үүсгэх талаар дэлгэрэнгүй хэлбэлзэл эхэлж байна - Тиймээс өөрсдийн нийлүүлэгчид хооронд нийцэж чадахгүй юу вэ? Бидний дотоод инфраструктур дээр суурилсан хэдий ч, өөрсдийн загварууд нь чухал зүйл байдаг: Бидний мэдээллийн шинжлэх ухааны багц нь прототипинг, туршилтын хувьд синтетик өгөгдлийн үүсгэх. Бүх хэрэгцээтэй үйл ажиллагаа, зарим тусгай загварууд хайрцаг дээр илүү сайн гүйцэтгэдэг. Хязгааргүй хэрэглээний тохиолдолд хувийн нууцлалын, латент, эсвэл инфраструктур хяналт бага чухал байдаг. Зохиогчийн эрх хуулиар хамгаалагдсан Энэ үйл явцыг дараах үйл явцыг агуулдаг: Специал LLM-Gateway үйлчилгээ нь ханган нийлүүлэгчтэй харилцаа холбооны эрхтэй хэрэглэгчийн хүсэлтийг манай схем хэлбэрээр хүлээн авах болно. The request is converted into the provider-specific format, including any . provide_extensions Зохиогчийн эрх хуулиар хамгаалагдсан. LLM-Gateway үйлчилгээний хариулт хүлээн авах, бидний стандартизирован хариултын схемууд руу гарын авлага. Энэ нь өндөр түвшний схемууд юм. Энэ нь зарим нэг микросервисыг хуваалцаж байна. Специфик компонент, streaming хариу формат нь дараах хэсэгт харуулсан болно. Streaming формат LLM responses are generated incrementally — token by token — and then aggregated into үр ашигтай дамжуулахын тулд. Хэрэглэгчийн үзэсгэлэнт, вэб браузер, гар утасны програм, эсвэл терминал дамжуулан, туршлага байх ёстой Энэ нь дэмждэг тээврийн механизм хэрэгтэй . chunks fluid and responsive low-latency, real-time streaming Эдгээр авахын тулд хоёр үндсэн сонголт байдаг: WebSockets: бүрэн дуплекс холбооны суваг, клиент, сервер хооронд байнгын хооронд интеракцийг боломжийг олгодог. Server-Sent Events (SSE): Үнэгүй хугацааны шинэчлэхэд өргөн хэрэглэгддэг нэг тусламжтай, HTTP-д суурилсан streaming протокол. вэбсайт вэбсайт Сервер дамжуулах үйл явдал (SSE) Сервер дамжуулах үйл явдал (SSE) Ямар ч SSE WebSockets дээр? While both options are viable, — OpenAI-тэй нийцтэй API болон харьцуулахад. Энэ нь хэд хэдэн практик ашигтай байдаг: SSE is the more commonly used solution for standard LLM inference Хялбар байдал: SSE стандарт HTTP дээр ажилладаг бөгөөд тусгай шинэчлэл, худалдаалах шаардлагагүй юм. Compatibility: Энэ нь нэмэлт цувралгүйгээр бүх гол браузерд natively ажилладаг. Unidirectional Flow: Ихэнх LLM хариу нь серверээс клиент руу зөвхөн дамжуулан дамжуулдаг бөгөөд энэ нь SSE-ийн загвартай байдаг. Proxy-Friendliness: SSE нь стандарт HTTP инфраструктур, өөрсдийн proxies зэрэг сайн тоглож байна. шинэчлэл, зар сурталчилгаа Эдгээр үр дүнд, . SSE is typically chosen for text-only, prompt-response streaming use cases Гэсэн хэдий ч, зарим шинэ хэрэглээний тохиолдолд багатай, бага давтамжтай, хоёр тусламжтай харилцааг шаарддаг - жинхэнэ цаг хугацааны транскрипт, хэл-нэг харилцаа холбоо. Эдгээр хэрэгцээг ашиглах (Server-to-Server) Эдгээр протоколууд нь байнгын мультимодаль импортын болон импортын хувьд илүү тохиромжтой байдаг. OpenAI-ийн Realtime API WebSockets OpenAI-ийн Realtime API Бидний систем нь зөвхөн Бид хамт түүний хялбар байдал, compatibility, бидний streaming загвартай харьцуулахад. text-based interactions SSE Reply Stream агуулга Нөхцөл тээвэрлэлийн хавтгай болгон сонгосон, дараагийн арга нь үр дүнтэй streaming нь зүгээр л хар текстээс дээш шаардлагатай — энэ нь хялбар хандах хэрэгтэй хэрэглэгчийн интерфэйс, автоматжуулалтын хэрэгсэл зэрэг дараах хэрэглэгчдийн дэмждэг. Stream-ийн дараах мэдээллийг агуулдаг: SSE what structure, metadata, and context Header-Level Metadata. Тавтай морилно уу ID гэх мэт үндсэн мэдэгдэх мэдээлэл. Үнэгүй агуулгын Chunks. Үнэгүй агуулгын output - загварыг үүсгэсэн токен, эсвэл шугам - дараа нь (n) цуврал дээр дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан дамжуулан хүргэж байна. Дараа нь тус бүр олон цуврал (жишээ нь, n = 2, n = 4) бүрдэнэ болно. Эдгээр цуврал нь тусгайлан үүсгэсэн бөгөөд паралель дамжуулан дамжуулан дамжуулан, тус бүр өөр өөр цувралтай цувралт хамарсан. Хэрэглээний болон Token-Level Metadata. Энэ нь үүсгэсэн токений тоо, цаг хугацааны өгөгдөл, logprobs эсвэл аргументийн шугам гэх мэт сонголттай дијагностик агуулдаг. Эдгээр нь төлбөр, debugging, эсвэл загварын үнэлгээ хийхэд ашиглаж болно. Стриймэлийн хариу бүтэц тодорхойлолсан дараа бид ч бас найдвартай байдал, дараагийн хөгжилтийн хувьд чухал нефункциональ шаардлагыг хэд хэдэн мэдэгдэж байна. Манай stream дизайн нь байх ёстой: Структуртай — агуулгын төрөл, үйл явдлын хязгаар нь явах. Extensible - одоогийн хэрэглэгчдэд хязгаарлахгүйгээр сонголттай метадаат хуваалцах боломжтой. Тавтай морилно уу, тавтай морилно уу, тавтай морилно уу. Олон хэрэглээ - гэх мэт эсвэл — Multiple sequence (completions) нь нэг генерацийг хүсэлтийн хэсэгт харьцуулахад үүсгэдэг. side-by-side comparison diverse sampling Стрейминг хариу зориулсан хамгийн өргөн формат нь . Спецификацид дагуу, нэг генерацийг чанарын хэд хэдэн цуврал агуулдаг. Ариун: OpenAI API хангамж choices OpenAI API хангамж сонголт Ариун Чат дуусгах сонголт жагсаалт. N-ийн 1-ээс их байгаа бол нэг элементээс дээш агуулдаг. Энэ нь долоо хоногийн хувьд шууд байж болно. choices Ариун A list of chat completion choices. Can contain more than one element if n is greater than 1. Can also be empty for the last chunk. Although, in practice, individual chunks usually contain only a single delta, the format allows for multiple sequence updates per chunk. It’s important to account for this, as future updates might make broader use of this capability. Notably, even the is designed to support this structure. official Python SDK official Python SDK We chose to follow the same structure to ensure compatibility with a wide range of potential features. The diagram below illustrates an example from our implementation, where a single generation consists of three sequences, streamed in six chunks over time: This chunk marks the beginning of the entire generation. It doesn’t contain any actual content but includes shared metadata, such as the generation ID, timestamp, and role (e.g., assistant, etc.). Chunk 1 — Generation Start. Chunk 2 — Sequence Start (Green & Purple). Хоёр цуврал нь харьцуулахад streaming эхэлнэ. Бүх нэг нь өөр өөр өөр өөрчлөн идентичлэгдсэн байна. Chunk 3 — Sequence Start (Blue) & Sequence Delta. Третьей Sequence (синий) эхэлдэг, эцэст нь анхны хоёр Sequence (зерийн болон цагаан) delta үйл явдлыг дамжуулан нэмэлт агуулгыг дамжуулдаг. Chunk 4 — Midstream Updates & Finish (Purple). Зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй, зэвэрдэггүй Both the green and blue sequences complete. Each sequence’s lifecycle is now fully enclosed between its respective start and finish markers. Chunk 5 — Remaining Sequence Finishes. This chunk closes the generation and may include global usage statistics, final token counts, latency info, or other diagnostics. Chunk 6 — Generation Finish. Хэрэв та харьцуулаад байгаа бол, тоног төхөөрөмж хүчтэй, үр дүнтэй болгохын тулд бид , Null шалгах, EOFs, эсвэл magic tokens гэх мэт хатуу механизмууд дээр суурилсан нь. Энэ бүтэцтэй арга хэрэгсэл доорх урсгалыг хялбардаг, ялангуяа олон төгсгөлд харьцуулагдсан орчинд, хөгжил, ажиллуулах хугацааны шалгах үед debuggability болон алдааны тусгаарлах сайжруулдаг. explicitly signal Start and Finish events for both the overall generation and each individual sequence Moreover, we introduce an additional Хязгаарлагдмал хүсэлт, зөвшөөрөлний асуудал гэх мэт зарим алдаа нь стандарт HTTP-ийн хариу кодыг дамжуулан шууд харуулсан болно. Гэсэн хэдий ч, ямар ч алдаа , бид хоёр сонголттай байна: HTTP-ийн дамжуулал ялгарч, эсвэл сайн хэлбэрийн SSE-ийн алдааны үйл явцыг хуваалцах. Бид дараагийн сонгосон байна. Хэвлэсэн холболт нь хэрэглэгчдэд сүлжээний асуудал, үр дүнтэй загвар / үйлчилгээний алдаа хооронд өөрчилж чадна. Хэвлэсэн алдааны хуваалцах ашиглан бид дэлгэцийн хооронд алдааг илүү найдвартай олж, хуваалцах боломжийг олгодог. Error during the generation process Backend Services and Request Flow Системийн төвд нэг эх үүсвэр томоохон байдаг: . Энэ нь баталгаажуулалт, хэрэглээний хяналтын, төлбөрийн гүйцэтгэлийн, заявлын форматинг, тодорхой загвар дээр суурилсан маршрутизац гэх мэт үндсэн асуултуудыг ажиллуулж болно. Gateway нь маш их хариулттай байж болох боловч бүх үйл ажиллагаа нь нарийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн LLM-Gateway Self-Hosted загвар As mentioned earlier, is well-suited for streaming responses to end users, but it’s not a practical choice for . When a request arrives, it must be routed to a suitable worker node for model inference, and the result streamed back. While some systems handle this using chained HTTP proxies and header-based routing, in our experience, this approach becomes difficult to manage and evolve as the logic grows in complexity. Server-Sent Events (SSE) internal backend communication Бидний дотоод инфраструктур нь дэмжих хэрэгтэй: — Requests may have different urgency levels (e.g., interactive vs. batch), and high-priority tasks must be handled first. Priority-aware scheduling Харьцуулалттай маршрутизатор — Хэвийн нодоос нь өндөр гүйцэтгэлийн GPU дээр ажилладаг бөгөөд хамгийн тохиромжтой байх ёстой; бусад нь overflow хүчин чадал болгон ажилладаг. — Each worker is configured to support only a subset of models, based on hardware compatibility and resource constraints. Model-specific dispatching To address these requirements, we use a Тавтай морилно уу, Тавтай морилно уу, Тавтай морилно уу, Тавтай морилно уу Энэ зорилгоор, гэхдээ бусад брокерүүд нь таны давтамж, дамжуулалт, үйл ажиллагаатай тохиргооны дагуу жинхэнэ байж болох юм. RabbitMQ нь түүний зөөлөн байдал, бидний одоогийн хэрэгсэлтэй харьцуулахад байгалийн тохиромжтой байсан. message broker RabbitMQ Зөвлөгөө RabbitMQ Now let’s take a closer look at how this system is implemented in practice: Бид хэрэглэдэг , allowing us to route requests based on model compatibility and node capabilities. The process is as follows: dedicated queues per model Customer Sends Request. LLM-Gateway үйлчилгээ (жишээ нь хэрэглэгчийн гэж нэрлэдэг) текст үүсгэх үйл явцыг идэвхжүүлэхийн тулд HTTP хүсэлтийг эхэлдэг. Scheduler үйлчилгээ энэ хүсэлтийг удирдахын тулд шинэ Request Handler-ийг эхэлдэг. Task Routing via Scheduler service. Захидал нь Scheduler-ийн үйл ажиллагаа явуулдаг бөгөөд энэ нь хүссэн загвар дээр суурилсан тохиромжтой давхаргыг сонгоно (жишээ нь зураг дээр зэвэрдэггүй хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хэлбэрийн хувьд). Worker Pick Up Task. Хамгийн тохиромжтой Inference Worker (хэвч нэг ажилтан нь хялбар, гэхдээ олон байдаг) жагсаалтад бүртгэгдсэн үйл ажиллагаа олж авах, боловсруулах эхэлнэ. Энэ ажилтан сонгосон загварыг орон нутгийн дагуу ажиллуулдаг. The worker streams the response chunk-by-chunk into the , to which the . Streaming the Response. Response Queue Scheduler replica handling the request is subscribed The Scheduler listens to the reply queue and receives the response chunks as they arrive. Receiving Response Chunks. The chunks are converted to SSE format and streamed to the client. SSE Streaming. Ажлын , бид хэлбэрийн broker-ийг хязгаарладаггүй байна: large payloads Instead of embedding large input or output data directly in the task, we upload it to an . external S3-compatible store A reference (such as a URL or resource ID) is included in the task metadata, and the worker retrieves the actual content when needed. RabbitMQ нь дизайн хэрэглэх Энэ нь Бүх is a regular RabbitMQ , dedicated to handling a single model type. We require , ашиглаж болно . Энэ тохиргоог, өндөр приоритет үнэтэй хуудсууд бага приоритет үнэтэй өмнө хүргэж, боловсруулсан байна. , where messages should be directed to the most performant available nodes first, Өндөр приоритеттай хэрэглэгчид идэвхжүүлэхийг хүсч байна; хамгийн бага приоритеттай хэрэглэгчид зөвхөн өндөр приоритеттай хэрэглэгчид нь блокадеж, эсвэл боломжтойгүй байгаа бол идэвхжүүлэхийг хүсч байна. routing and publishing messages Request Queue Өнгөрсөн priority-aware scheduling Сэтгэгдэл Priorities hardware-aware routing consumer priorities Өнгөрсөн Сэтгэгдэл Priorities consumer priorities If message loss is unacceptable, the following must be in place: to ensure the broker has received and stored the message. Publisher confirms Учир нь өгөгдлийн байлгах нь үргэлжлүүлэн хэлбэлзэл, үргэлжлүүлэн хэлбэлзэл шинэчлэх. Кворум нь репликацийг ашиглан илүү хүчтэй эрчим хүч чадалтай. Эдгээр нь RabbitMQ 4.0-ээс хойш хязгаарлагдмал зөвлөгөө, хэрэглэгчдэд зориулалтаар дэмждэг. Publisher confirms Publisher confirms Эдүүлбэр Quorum Эдүүлбэр Quorum RabbitMQ 4.0-ийн талаарх тодорхойлолт, хэрэглэгчийн приоритет So far, we’ve covered how tasks are published — but how is the handled? The first step is to understand how work in RabbitMQ. The broker supports a concept called , энэ нь нэг холбоос холбогдсон бөгөөд энэ холбогдсон үед автоматаар шилжүүлсэн. Энэ нь бидний суулгах нь байгалийн тохиромжтой болгодог. streamed response temporary queues exclusive queues Эксклюзивүүд Эксклюзивүүд We create , ensuring it’s automatically cleaned up when the replica shuts down. However, this introduces a challenge: while each service replica has a single RabbitMQ queue, it must handle . one exclusive queue per Scheduler service replica many requests in parallel Эдгээр талаар бид RabbitMQ цуврал нь а , тохиромжтой Scheduler-ийн репликейн хариу зайлсхийх. Бүх хэрэглэгчийн хүсэлт нь , which is included in every response chunk. Inside the , we maintain an additional Урт хугацааны in-memory чингэлэг нь — үйл ажиллагаатай хүсэл бүр нэг. Тавтай морилно уу, тавтай морилно уу. RabbitMQ чингэлэг нь үйлчилгээний реплик нь амьдралын хугацаанд байлгах болно. transport layer unique identifier Scheduler in-memory routing layer Schematically this looks as follows: A central dispatcher within the Scheduler dispatches chunks to the appropriate in-memory queue, each managed by a dedicated handler. Handlers then stream the chunks to users using SSE-protocol. Баримтлал There are several mature frameworks available for efficient LLM inference, such as Нөхцөл . These systems are designed to болон rea time response tokens үүсгэх, хэзээ ч байтугай batching болон GPU гэрэлтүүлэг optimization зэрэг шинж чанарыг ашиглан. Core inference engine гэж, зарим өөрчилсөн хувилбарууд: Нөхцөл Үнэлгээ process multiple sequences in parallel vLLM vLLM Нөхцөл Үнэлгээ Үнэлгээ Custom beam search имплементаци - манай генерацийн логик нь илүү сайн тохиромжтой, структурын хязгаарлалт дэмждэг. — allowing models to return outputs conforming to business-specific formats. Support for structured output schemas туршлагатай, бид багатай библиотек шинэчлэлүүд нь — Бүтээгдэхүүний чанарын, determinism, эсвэл concurrency үйл ажиллагаа нь. Үүний хувьд бид хүчтэй туршилтын хоолой суурилсан байна: significantly alter model behavior Стресс туршилтын нь concurrency асуудал, мэдрэмж уут, эсвэл тогтвортой байдал регрессийг олж авах. Determinism туршилтын тогтмол сав ба параметр бүтэц нь тогтмол outputs хангахын тулд. to cover a wide range of generation settings, without going overboard. Parameter grid testing хадгалах & суулгах Most modern systems run in — хөнгөн эсвэл Kubernetes (K8s) дотор. Энэ тохиргоог стандарт backend үйлчилгээнд сайн ажилладаг боловч энэ нь ойролцоогоор асуултууд бий болгодог . LLM models can be , , баглаа боодлын загвар нь Docker зураг дээр шууд жинтэй байдаг - хурдан проблематик болж байна: containerized environments model weight storage tens or even hundreds of gigabytes in size Slow builds - Олон үе шаттай builds болон кешинг нь ч байтугай, build фазын хооронд том загварын файлуудыг дамжуулах нь CI хугацааг ихэвчлэн нэмэгдүүлэх боломжтой. Хязгаарлагдмал суулгах — Бүх суулгахын тулд хатуу зургийг хуваалцах шаардлагатай бөгөөд энэ нь хэд хэдэн минутын турш байх болно. — Neither Docker registries nor Kubernetes nodes are optimized for handling extremely large images, resulting in bloated storage usage and bandwidth strain. Resource inefficiency Үүнийг шийдэхийн тулд бид өөрсдийн from the Docker image lifecycle. Our models are stored in an , and fetched just before inference service startup. To improve startup time and avoid redundant downloads, we also use to cache model weights on each node. model storage external S3-compatible object storage local persistent volumes (PVCs) local persistent volumes (PVCs) Өргөтгөсөн орон нутгийн хэмжээ (Local Persistent Volumes, PVCs) Observability Тавтай морилно уу, энэ систем дээр суурилсан Үнэгүй to ensure reliability and performance at scale. streaming, message queues, and real-time token generation robust observability Стандарт үйлчилгээний түвшний метрик (CPU, памын, алдааны түвшин гэх мэт) гадна бид дараах зүйлсийг хянахад чухал гэж үзэж байна: Хүргэлтийн уян хатуу, дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах дараах Token/chunk дамжуулалт - секундын дотор үүсгэсэн токений тоо, эсвэл хариу хавтгай хуваалцахын тулд латенци, эсвэл дамжуулалтын регрессийг идентичлэхэд туслах. — to pinpoint where requests fail or stall across components (gateway, broker, workers, etc.). Дистрибьютор Tracking — since inference processes can crash under rare conditions (e.g., bad input or extreme parameter values), proactive monitoring of liveness and readiness is critical. Inference engine health checks Дистрибьютор Tracking Дистрибьютор Tracking Дараа нь сайжруулах Бидний систем үйлдвэрлэлийн тохиромжтой байдаг боловч optimization нь чухал асуултууд, боломжууд байдаг: Хэвлэсэн KV-Cache ашиглан үр дүнг сайжруулах. Тавтай морилно уу тавтай морилно уу тавтай морилно уу. Бүх мэдээллийн шинжлэх ухааны бүлэгт зориулсан хялбар загварын хүргэх хоолой үүсгэх. Conclusion While building a reliable and provider-independent LLM serving system can seem complex at first, it doesn’t require reinventing the wheel. Each component — streaming via SSE, task distribution through message brokers, and inference handled by runtimes like vLLM — serves a clear purpose and is grounded in existing, well-supported tools. With the right structure in place, it’s possible to create a maintainable and adaptable setup that meets production requirements without unnecessary complexity. Дараагийн бичлэгдэд бид дистрибуирован KV-Caching, реплик дээрх хэд хэдэн загварыг боловсруулах, ML-ориентирован багтай тохиромжтой суурилуулах ажлын үйл явц гэх мэт илүү дэвшилтэт талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи. зохиогч Токио , Stanislav Shimovolos Станислав Шимовлос Stanislav Shimovolos Токио , Максим Афанасиев Максим Афанасиев Максим Афанасиев Үнэлгээ , Tochka дээр ажиллаж байгаа ажил Мэргэшсэн Мэргэшсэн Мэргэшсэн