ម៉ាស៊ីនពីរកម្រិត DGX Spark ម៉ូដែលតែមួយ៖ ច្បាប់ចម្លងនៅលើម៉ាស៊ីននីមួយៗ ជំនួសឱ្យការបំបែកវា

ប្រតិបត្តិការ

រយៈពេលប្រាំពីរសប្តាហ៍ គំរូភាសាមូលដ្ឋានរបស់យើងបានដំណើរការដោយបំបែកលើម៉ាស៊ីន NVIDIA GB10 ចំនួនពីរ ដោយប្រើ tensor parallelism។ នៅថ្ងៃទី 22 ខែតុលា យើងបានជំនួសវាដោយច្បាប់ចម្លងពេញលេញនៃគំរូនៅលើម៉ាស៊ីននីមួយៗ និង proxy តម្រៀបតាមចំនួនការតភ្ជាប់តិចបំផុតនៅខាងមុខ។ អត្រាបញ្ចេញទិន្នន័យបានកើនឡើងពីប្រហែល 180 ទៅ 210 tokens ក្នុងមួយវិនាទី ហើយឥឡូវនេះ ម៉ាស៊ីនណាមួយអាចចាប់ផ្តើមឡើងវិញដោយមិនធ្វើឱ្យគំរូដួល។

ហេតុអ្វីបានជាយើងបំបែកវា

ម៉ាស៊ីននីមួយៗមានអង្គចងចាំ 128 GB ដែល CPU និង GPU ប្រើរួមគ្នា។ នៅខែកញ្ញា គំរូអាចដំណើរការលើម៉ាស៊ីនតែមួយបាន ប៉ុន្តែ cache របស់វាស្ទើរតែមិនអាចទ្រាំបាន៖ ការកសាង vLLM ដែលយើងបានប្រើ មិនអាចរក្សាទុក KV cache នៃគំរូនេះជាទម្រង់ FP8 បានទេ ដូច្នេះ cache ត្រូវបានរក្សាទុកជា BF16 ហើយម៉ាស៊ីនតែមួយមានកន្លែងសម្រាប់វាត្រឹមតែ 499,110 tokens។ ចំនួននេះតិចជាងសំណើពីរនៅពេលប្រើប្រាស់បរិបទពេញលេញរបស់គំរូដែលមាន 262,144 tokens។ ការបំបែកលើម៉ាស៊ីនទាំងពីរដោយប្រើ tensor parallelism តាមរយៈការតភ្ជាប់បណ្តាញផ្ទាល់របស់ពួកវា ធ្វើឱ្យ cache កើនឡើងដល់ជាង 3 លាន tokens។ យើងបានបំបែកគំរូដើម្បីទទួលបានកន្លែងទំនេរ មិនមែនដើម្បីល្បឿនទេ។

អ្វីដែលបានផ្លាស់ប្តូរ

ការកសាង 4-bit ថ្មីជាងនៃគំរូដូចគ្នា (NVFP4 ដែលបង្កើតឡើងដោយ quantisation-aware distillation) ប្រើអង្គចងចាំប្រហែល 71 GiB ហើយការកសាង vLLM សហគមន៍សម្រាប់ GB10 (eugr/spark-vllm-b12x) ដំណើរការ cache របស់វាជា FP8។ ឥឡូវនេះ ម៉ាស៊ីនតែមួយកាន់កាប់គំរូទាំងមូល និង cache ចំនួន 0.76 ទៅ 1.08 លាន tokens ដែលមានកន្លែងសម្រាប់សំណើចំនួន 2.9 ទៅ 4.1 នៅពេលប្រើប្រាស់បរិបទពេញលេញ អាស្រ័យលើបរិមាណអង្គចងចាំដែលម៉ាស៊ីនផ្តល់ឱ្យ។ ច្បាប់ចម្លងទាំងពីរប្រើប្រាស់ការបញ្ចេញសំឡេងស៊េរីនៃគំរូខ្លួនឯង (MTP, draft tokens ចំនួន 4)។ មុនពេលប្តូរ យើងបានដំណើរការការធ្វើតេស្តការហៅឧបករណ៍របស់យើងលើការកសាងថ្មី៖ វាទទួលបានពិន្ទុ 86 ខណៈដែលការកសាងដែលវាជំនួសទទួលបាន 75។

អ្វីដែលយើងបានវាស់វែង

បំបែកលើម៉ាស៊ីនពីរច្បាប់ចម្លងនៅលើម៉ាស៊ីននីមួយៗ
KV cachemore than 3 million tokens0.76 and 1.08 million tokens
សំណើនៅពេលប្រើប្រាស់បរិបទពេញលេញប្រហែល 122.9 និង 4.1
អត្រាបញ្ចេញទិន្នន័យក្រោមបន្ទុករបស់យើងប្រហែល 180 tokens/s210 tokens/s (111 + 99)
ការចាប់ផ្តើមប្រហែល 20 នាទី5 ទៅ 13 នាទីក្នុងមួយច្បាប់ចម្លង
ម៉ាស៊ីនមួយចាប់ផ្តើមឡើងវិញគំរូដួលច្បាប់ចម្លងម្ខាងទៀតបម្រើការ

មួយច្បាប់ដោយខ្លួនឯង គិតតាមចំនួនសំណើដែលវាបម្រើក្នុងពេលតែមួយ៖ ជាមួយសំណើខ្លីៗ 1 សំណើផ្តល់ 36 token ក្នុងមួយវិនាទី 4 ផ្តល់ 82 8 ផ្តល់ 109 និង 16 ផ្តល់ 150។ ជាមួយសំណើវែងៗរបស់ទីភ្នាក់ងារអ៊ីមែលរបស់យើង 4 ផ្តល់ 81 8 ផ្តល់ 113 និង 16 ផ្តល់ត្រឹមតែ 87៖ បន្ទាប់ពីសំណើបែបនេះចំនួន 8 ការបន្ថែមច្រើនជាងនេះធ្វើឱ្យវាយឺតជាងមុន។

សម្រាប់ពេលរសៀលមួយ ច្បាប់មួយទទួលបានយ៉ាងច្រើនបំផុត 12 សំណើក្នុងពេលតែមួយ ហើយមួយទៀត 8។ ច្បាប់ទីមួយផលិតបាន 91 ទៅ 93 token ក្នុងមួយវិនាទី និងបញ្ចប់ 26 ទៅ 27 សំណើក្នុងមួយនាទី៖ ច្បាប់ទីពីរ 81 ទៅ 83 token ក្នុងមួយវិនាទី និង 22 សំណើក្នុងមួយនាទី។ ឥឡូវនេះ ទាំងពីរទទួលបាន 12។

អ្វីដែលយើងបានលះបង់

កន្លែងទំនេរ។ គំរូបែងចែកមាន cache មួយដែលមានជាង 3 លាន token៖ ច្បាប់ទាំងពីរមាន cache តូចជាងពីរ ហើយសំណើមួយអាចប្រើបានតែ cache របស់ច្បាប់ដែលបម្រើវាប៉ុណ្ណោះ។ ទីភ្នាក់ងាររបស់យើងផ្ញើសំណើខ្លីៗ និងមធ្យមជាច្រើន ហើយសម្រាប់ពួកវា អត្រាបម្រើការសំខាន់ជាង។ ប្រសិនបើអ្នកបម្រើបរិបទវែងៗតិចតួចក្នុងពេលតែមួយ ការបែងចែកអាចនៅតែជាជម្រើសល្អជាង។ យើងបានរក្សាទុកការរៀបចំបែងចែក ហើយការប្តូរត្រឡប់មកវិញគឺស្គ្រីបតែមួយ។

អ្វីដែលបានកើតឡើងខុសក្នុងអំឡុងពេលប្តូរ

  1. ដប់មួយនាទីដោយគ្មានគំរូ បន្ទាប់មក 30 វិនាទីនៃកំហុស 502។ គំរូបែងចែកត្រូវតែឈប់មុនពេលច្បាប់អាចផ្ទុកលើម៉ាស៊ីនដូចគ្នា ដូច្នេះទីភ្នាក់ងាររបស់យើងបានរង់ចាំប្រហែលដប់មួយនាទី។ នៅពេលដែលច្បាប់ទីមួយដំណើរការ ប្រូកស៊ីនៅតែឆ្លើយតប "502 no live upstreams" បន្ថែមប្រហែល 30 វិនាទីទៀត៖ វាបានសម្គាល់ backends ថាបរាជ័យខណៈពេលដែលពួកវាបានដួល (max_fails=3, fail_timeout=30s) ហើយមិនព្យាយាមម្តងទៀតរហូតដល់ពេលវេលានោះអស់។
  2. អតិថិជនមួយដែលបានរំលងប្រូកស៊ី។ កិច្ចការ batch មួយរបស់យើងមានអាសយដ្ឋានរបស់ម៉ាស៊ីនទីមួយនៅក្នុងការកំណត់រចនាសម្ព័ន្ធរបស់វា ដូច្នេះបន្ទុកទាំងមូលរបស់វាបានទៅកាន់ច្បាប់មួយ ខណៈដែលមួយទៀតមានសមត្ថភាពទំនេរ។ ឥឡូវនេះ អតិថិជនគ្រប់រូបឆ្លងកាត់ប្រូកស៊ី៖ អាសយដ្ឋានផ្ទាល់ខ្លួនរបស់ម៉ាស៊ីនគឺសម្រាប់តែការត្រួតពិនិត្យសុខភាពប៉ុណ្ណោះ។
  3. សន្ទស្សន៍ដែលបានផ្លាស់ប្តូរភ្លាមៗ។ ម៉ាស៊ីនត្រួតពិនិត្យអត្រាបម្រើការរបស់យើងបានអាន vLLM /metrics តាមរយៈប្រូកស៊ី។ ជាមួយ backends ពីរ ការអានជាបន្តបន្ទាប់បានមកពីច្បាប់ផ្សេងគ្នា តួលេខរាប់បានលោតទៅមក ហើយម៉ាស៊ីនត្រួតពិនិត្យបានរាយការណ៍ថាគំរូខ្វះខាត។ ឥឡូវនេះ វាអានច្បាប់នីមួយៗដោយផ្ទាល់ និងបូកបញ្ចូលគ្នា។
  4. ម៉ាស៊ីនត្រួតពិនិត្យចាស់មួយដែលនឹងបានបញ្ឈប់ច្បាប់ចម្លងថ្មី។ ការរៀបចំបែងចែកមានម៉ាស៊ីនត្រួតពិនិត្យមួយដែលបានចាប់ផ្តើមសេវាកម្មរបស់វាឡើងវិញនៅពេលដែលគំរូឈប់ឆ្លើយតប។ សេវាកម្មថ្មីប្រកាស Conflicts= ជាមួយនឹងសេវាកម្មចាស់ ដូច្នេះការចាប់ផ្តើមឡើងវិញនោះនឹងបានបញ្ឈប់ច្បាប់ចម្លងថ្មី។ វាត្រូវបានបិទដោយប្រើ systemctl disable --now មិនមែនគ្រាន់តែបញ្ឈប់ទេ ព្រោះស្រទាប់ប្រតិបត្តិការរបស់យើងចាប់ផ្តើមឯកតាដែលបានបើកប៉ុន្តែមិនកំពុងដំណើរការឡើងវិញ។
  5. អង្គចងចាំនៅលើម៉ាស៊ីនដែលធ្វើការផ្សេងទៀត។ ម៉ាស៊ីនមួយក៏ដំណើរការមូលដ្ឋានទិន្នន័យ និងការសាងសង់គេហទំព័ររបស់យើងផងដែរ។ ដោយមាន gpu-memory-utilization របស់ vLLM នៅ 0.78 មានតែ 5 GiB ប៉ុណ្ណោះដែលនៅសល់សម្រាប់អ្វីៗទាំងអស់ផ្សេងទៀត ដូច្នេះយើងបានបន្ថយវាទៅ 0.74 ហើយចាប់ផ្តើមឡើងវិញតែច្បាប់ចម្លងនោះខណៈដែលច្បាប់ចម្លងមួយទៀតទទួលបន្ទុក។ នៅលើម៉ាស៊ីនទាំងនេះ ចំណែកអង្គចងចាំដែលអ្នកផ្តល់ឱ្យ vLLM ចេញពីអង្គចងចាំដូចគ្នាទៅនឹងអ្វីៗទាំងអស់ផ្សេងទៀត។

ប្រសិនបើអ្នកមានម៉ាស៊ីនទាំងនេះពីរ

Factory Floor ផ្តល់នូវ proxy និងការកំណត់រចនាសម្ព័ន្ធចាប់ផ្តើមសម្រាប់ម៉ាស៊ីនមួយ ឬពីរ ការត្រួតពិនិត្យសុខភាព និងការសាកល្បងប្រើប្រាស់ឧបករណ៍ដែលយើងដំណើរការមុនពេលប្តូរគំរូ ព្រមទាំងម៉ាស៊ីនត្រួតពិនិត្យ និងប្រព័ន្ធការពារអង្គចងចាំសម្រាប់ផ្នែកនៅសល់នៃម៉ាស៊ីន។

បានធ្វើបច្ចុប្បន្នភាព: