SSD Nodes Learn 🎉 VPS dari $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

Cara self-host model Kimi K3 dengan perkakasan terhad

Ketahui pengiraan VRAM sebenar untuk model 2.8 trilion parameter Kimi K3. Kami membincangkan matematik KV cache dan tiga kaedah praktikal menjalankan model tanpa kluster 32 GPU.

Keperluan untuk self-hosting Kimi K3

Self-hosting Kimi K3 bermakna mencari ruang untuk 2.8 trilion parameter. Moonshot menerbitkan open weights dalam format MXFP4, iaitu kira-kira separuh bait bagi setiap parameter. Oleh itu, berat model sahaja mencecah kira-kira 1.4 TB sebelum anda memperuntukkan satu token pun untuk cache. Tiada pemecut (accelerator) yang dijual hari ini mampu menampung beban tersebut secara sendirian. K3 ialah model berbilang nod (multi-node), dan bagi satu pelayan, jawapannya adalah tidak.

Itulah keputusannya. Segala maklumat di bawah adalah pengiraan di sebaliknya, kerana pengiraan ini merupakan bahagian yang akan anda gunakan semula pada keluaran akan datang. Beberapa vendor infrastruktur menerbitkan panduan penempatan K3 dalam tempoh beberapa minggu selepas pengumuman pada 17 Julai 2026, dan setiap satu daripadanya mengandaikan anda sudah memiliki sebuah kluster. Halaman ini bermula dari sudut yang berbeza: apakah kosnya, apakah yang boleh anda jalankan sebagai ganti, dan bagaimana untuk menentukan kategori mana yang anda berada.

Jumlah parameter dan parameter aktif tidak mempunyai angka yang sama

K3 ialah model mixture of experts. MoE (mixture of experts) membahagikan rangkaian kepada banyak sub-rangkaian dan membenarkan penghala (router) memilih beberapa daripadanya bagi setiap token. Kad model menyenaraikan 2.8T jumlah parameter dan 104B parameter yang diaktifkan bagi setiap token, daripada 896 pakar yang dihalakan di mana 16 daripadanya aktif untuk mana-mana token tertentu, merentasi 93 lapisan.

Kedua-dua kiraan parameter tersebut menjawab soalan yang berbeza, dan tertukar antara keduanya merupakan kesilapan paling lazim dalam setiap perbincangan "bolehkah saya menjalankan ini".

Parameter aktif menentukan kos pengiraan. Sesuatu token didarabkan melalui kira-kira 104B parameter, jadi daya pemprosesan (throughput) yang anda patut jangkakan menyerupai model padat 104B dan bukannya 2.8T. Itulah sebab utama MoE dibina.

Jumlah parameter menentukan kos memori. Penghala boleh memilih mana-mana pakar untuk mana-mana token, jadi setiap pakar perlu tersedia dalam memori sebelum permintaan pertama tiba. Anda tidak boleh menyimpan 104B dalam VRAM dan mengambil bakinya atas permintaan, kerana proses pengambilan tersebut perlu selesai dalam masa mikrosaat manakala pautan PCIe hanya memindahkan puluhan gigabait sesaat. Ramai yang cuba melakukannya. Menstrim pakar daripada NVMe akan mengubah model yang sepatutnya mengeluarkan berpuluh-puluh token sesaat kepada model yang hanya mengeluarkan satu token setiap beberapa saat.

Oleh itu, ia murah untuk dikira tetapi mahal untuk disimpan. Tentukan saiz perkakasan berdasarkan 2.8T. Tentukan jangkaan kelajuan anda berdasarkan 104B.

Bait per pemberat, dan dari mana datangnya terabait

Bilangan parameter didarab dengan bait per pemberat. Bagi pemberat, itulah keseluruhan formulanya.

ChartWeight footprint of 2.8 trillion parameters, by precision
The data behind this chart
[
  {
    "label": "bf16",
    "bytes_per_weight": 2,
    "weights_tb": 5.6
  },
  {
    "label": "fp8",
    "bytes_per_weight": 1,
    "weights_tb": 2.8
  },
  {
    "label": "4-bit (MXFP4, as shipped)",
    "bytes_per_weight": 0.5,
    "weights_tb": 1.4
  },
  {
    "label": "2-bit",
    "bytes_per_weight": 0.25,
    "weights_tb": 0.7
  }
]

K3 dilatih dengan kesedaran kuantisasi (quantisation aware) dan dikeluarkan dengan pemberat MXFP4 serta pengaktifan MXFP8, jadi baris 4-bit adalah yang sebenar. Baris di atasnya disediakan sebagai skala: pada bf16, model yang sama memerlukan 5.6 TB. MXFP4 juga menyimpan satu skala 8-bit yang dikongsi bagi setiap blok 32 pemberat, yang menambah kira-kira 6 peratus, jadi repositori yang diterbitkan berada lebih hampir kepada 1.5 TB berbanding 1.4 TB yang bersih.

Ini menutup jalan keluar yang biasa. "Kuantisakan sahaja" tidak membantu di sini, kerana pusat pemeriksaan (checkpoint) yang dikeluarkan sudah pun 4-bit. Menurunkan kepada 2-bit akan menjadikan pemberat kepada 0.7 TB dan menjejaskan ketepatan yang belum diukur oleh sesiapa pun pada pusat pemeriksaan ini. Anda masih akan jauh melampaui keupayaan mana-mana kad tunggal.

Berapakah bilangan GPU yang diperlukan oleh Kimi K3

ChartGPUs required to hold 1.4 TB of weights, before any KV cache
The data behind this chart
[
  {
    "config": "H100 80GB",
    "hbm_per_gpu_gb": 80,
    "gpus_for_weights": 18
  },
  {
    "config": "H200 141GB",
    "hbm_per_gpu_gb": 141,
    "gpus_for_weights": 10
  },
  {
    "config": "B200 192GB",
    "hbm_per_gpu_gb": 192,
    "gpus_for_weights": 8
  },
  {
    "config": "GB300 288GB",
    "hbm_per_gpu_gb": 288,
    "gpus_for_weights": 5
  }
]

Anggap angka tersebut sebagai lantai, bukan sasaran. Ia hanya mengira berat (weights): tiada KV cache, tiada penimbal pengaktifan (activation buffers), tiada fragmentasi pengumpuk (allocator fragmentation), dan tiada ruang untuk permintaan serentak kedua. Ia juga mengandaikan pembahagian selari yang sekata, yang tidak selalu dapat dilakukan oleh 93 lapisan dan 896 pakar.

Panduan yang diterbitkan berada jauh di atas lantai tersebut. Setakat Ogos 2026, Moonshot mengesyorkan supernode dengan 64 pecut atau lebih, dan buku resipi SGLang menyertakan konfigurasi H100 yang dibina daripada empat nod 8-GPU, 32 GPU dan 2,560 GB memori agregat, berbanding lantai 18 kad. Jurang itu bukan pembaziran. Ia adalah untuk KV cache, memori pengaktifan, dan ruang kepala (headroom) yang membolehkan pelayan memproses banyak permintaan secara berkelompok (batch) pada satu masa. Malah baris yang paling mesra, kad kelas 5 GB300, menerangkan mesin yang kebanyakan penyedia tidak sewakan sebagai satu SKU tunggal.

KV cache ialah bahagian yang mengejutkan ramai orang

Weight merupakan kos tetap. KV (key value) cache pula tidak: ia berkembang mengikut panjang konteks dan bertambah dengan setiap pengguna serentak. Untuk attention biasa, formulanya ialah bytes per token = 2 * layers * kv_heads * head_dim * bytes_per_element, kemudian anda darabkan dengan panjang konteks dan bilangan pengguna serentak.

Berikut ialah contoh pengiraan, dan ini hanyalah satu contoh: 64 layer, 8 KV head, dimensi head 128, fp8. Ini memberikan 2 64 8 128 1 = 131,072 bait, jadi 128 KiB bagi setiap token.

ChartKV cache per user in the worked example, at 128 KiB per token
The data behind this chart
[
  {
    "label": "8k context",
    "kv_gib_per_user": 1
  },
  {
    "label": "32k context",
    "kv_gib_per_user": 4
  },
  {
    "label": "128k context",
    "kv_gib_per_user": 16
  },
  {
    "label": "1M context",
    "kv_gib_per_user": 128
  }
]

Seorang pengguna pada konteks 128k menelan kos 16 GiB. Seorang pengguna pada kapasiti penuh sejuta token menelan kos 128 GiB, iaitu lebih besar daripada kapasiti mana-mana kad tunggal untuk satu perbualan.

K3 tidak menggunakan attention biasa, dan angka terakhir itulah sebabnya. 93 layer miliknya terdiri daripada 69 layer KDA (Kimi Delta Attention) dan 24 layer Gated MLA (multi-head latent attention). KDA mengekalkan state berulang (recurrent state) bersaiz tetap dan bukannya cache yang berkembang dengan setiap token, manakala MLA memampatkan key dan value ke dalam satu vektor latent berpangkat rendah (low rank). Oleh itu, kos sebenar bagi setiap token jauh lebih rendah daripada contoh pengiraan tadi. Moonshot belum menerbitkan dimensi latent tersebut, jadi saya tidak akan meletakkan angka bagi setiap pengguna untuk K3 itu sendiri. Sebaliknya, ukur sendiri: mulakan pelayan dengan --max-model-len yang kecil, pantau memori dengan nvidia-smi, kemudian tingkatkan had tersebut sehingga peruntukan (allocation) gagal.

Bentuk penaakulan ini akan kekal dalam keluaran seterusnya. Jika sesuatu model mengiklankan konteks sejuta token tetapi tidak menyatakan apa-apa tentang reka bentuk attention-nya, anggaplah cache sebagai kekangan utama sehingga terbukti sebaliknya.

Tahap 1: menyewa kluster mengikut jam

Ini adalah satu-satunya tahap yang menjalankan K3 itu sendiri. Anda tidak membeli perkakasan tersebut. Anda menyewanya untuk jam yang anda perlukan dan menghentikannya selepas itu.

ChartMonthly cost at an assumed 2.50 USD per GPU hour, 30 day month
The data behind this chart
[
  {
    "label": "1 GPU, always on",
    "gpu_hours": 720,
    "usd_cost": "1,800"
  },
  {
    "label": "8 GPUs, 4 hours a day",
    "gpu_hours": 960,
    "usd_cost": "2,400"
  },
  {
    "label": "8 GPUs, always on",
    "gpu_hours": 5760,
    "usd_cost": "14,400"
  },
  {
    "label": "32 GPUs, always on",
    "gpu_hours": 23040,
    "usd_cost": "57,600"
  }
]

Kadar tersebut adalah satu andaian, bukan sebut harga. Harga senarai atas permintaan bagi pemecut pusat data berada pada sekitar 2 hingga 5 USD sejam bagi setiap GPU sepanjang tahun 2026, dan kapasiti yang ditempah adalah lebih murah. Ambil angka sebenar daripada pembekal anda dan lakukan semula pendaraban: bilangan GPU didarab dengan jam didarab dengan kadar. Tujuan carta ini adalah untuk menunjukkan nisbah. Melakukan bursting pada nod 8 GPU selama empat jam sehari menelan kos 2,400 USD sebulan, manakala membiarkan konfigurasi 32 GPU bersaiz SGLang terus berjalan menelan kos 57,600 USD.

Kedua-dua pelayan arus perdana menerbitkan arahan pelancaran pada kad model.

pip install vllm
vllm serve "moonshotai/Kimi-K3"
pip install sglang
python3 -m sglang.launch_server --model-path "moonshotai/Kimi-K3" --host 0.0.0.0 --port 30000

Tiada satu pun arahan asas tersebut yang anda jalankan pada kluster sebenar. Tambahkan flag selari yang sepadan dengan perkakasan anda: SGLang menggunakan --tp-size untuk tensor parallel dan --ep-size untuk expert parallel, dan hasil darab kedua-duanya mestilah sama dengan bilangan GPU yang anda miliki sebenarnya.

Pastikan pelayan telah naik sebelum anda menghantar trafik sebenar:

curl http://127.0.0.1:30000/v1/models

Pelayan yang sihat akan menjawab dengan objek JSON yang menyenaraikan id model. Connection refused bermaksud proses tersebut masih memuatkan pemberat atau telah pun keluar, jadi baca log pelayan sebelum anda mencuba semula.

Kegagalan biasa pada hari pertama ialah runtime yang lebih lama daripada model. K3 dilancarkan dengan KDA dan lapisan MoE baharu yang tidak dibawa oleh keluaran stabil vLLM dan SGLang semasa pelancaran, dan simptomnya ialah pelayan keluar semasa permulaan dengan baris dalam bentuk Model architectures [...] are not supported for now. Tiada perubahan konfigurasi yang dapat membetulkannya, kerana kod untuk menjalankan lapisan tersebut tiada dalam binaan anda. Pasang versi nightly yang dinamakan dalam kad model, atau tunggu keluaran yang menyertakannya.

Satu nota kos yang sering memerangkap pengguna. Meter bermula apabila instans bermula, bukan apabila model sedia. Muat turun 1.5 TB pada kelajuan 1 GB/s mengambil masa kira-kira 25 minit masa kluster sebelum token pertama. Letakkan pemberat pada volum yang kekal selepas instans ditamatkan, supaya larian kedua bermula dalam masa beberapa minit sahaja.

Tahap 2: jalankan model yang lebih kecil pada satu pemecut

Anda tidak menjalankan K3 pada tahap ini. Nyatakan perkara ini dengan jelas sebelum anda bermula, kerana kebanyakan perbincangan mengenai "menjalankan K3 secara setempat" berakhir di sini tanpa pengakuan tersebut.

Peraturan kesesuaian menggunakan formula yang sama dalam skala kecil: parameter didarab dengan bait bagi setiap pemberat, ditambah dengan cache KV, serta kira-kira 2 GB bebanan masa jalan, mestilah berada di bawah kapasiti VRAM anda. Pada 4-bit, ini adalah kira-kira separuh bait bagi setiap parameter, yang memberikan gandingan yang selesa:

  • Kad 16 GB: model 7B pada 4-bit dengan ruang untuk konteks yang panjang
  • Kad 24 GB: model 14B pada 4-bit
  • Kad 48 GB: model 32B pada 4-bit
  • Kad 80 GB: model 70B pada 4-bit, atau kelas MoE 30B pada 8-bit

Ollama ialah laluan terpantas untuk mendapatkan pelayan yang berfungsi pada VPS dengan GPU yang dipasang:

curl -fsSL https://ollama.com/install.sh | sh
ollama run qwen3:14b

ollama run memuat turun model pada penggunaan pertama, kemudian membawa anda ke gesaan arahan. Tag yang tidak wujud akan memaparkan Error: model "..." not found, jadi salin tag daripada halaman pustaka dan bukannya menaipnya berdasarkan ingatan. Panduan lengkap, termasuk unit systemd dan akses jauh, terdapat dalam menjalankan Ollama pada VPS.

llama.cpp memberikan anda lebih kawalan ke atas kuantisasi dan offload:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j
./build/bin/llama-server -m model.gguf -c 8192 -ngl 99 --host 0.0.0.0 --port 8080

-ngl 99 meminta setiap lapisan dimuatkan ke dalam GPU. Baca log muatan: ia mencetak berapa banyak lapisan yang telah di-offload. Lapisan yang melimpah ke dalam RAM sistem akan berjalan pada lebar jalur RAM dan bukannya lebar jalur HBM, jadi kelajuan penjanaan akan merosot dengan ketara sebaik sahaja model tidak lagi muat sepenuhnya. Perbandingan antara kedua-dua alat ini dibincangkan dalam Ollama dan llama.cpp secara perbandingan.

Tahap 3: API dihoskan, orkestrasi dihoskan sendiri

ChartKimi K3 published API pricing, USD per million tokens, checked 17 July 2026
The data behind this chart
[
  {
    "label": "Input, cache hit",
    "usd_per_million_tokens": "0.30"
  },
  {
    "label": "Input, cache miss",
    "usd_per_million_tokens": "3.00"
  },
  {
    "label": "Output",
    "usd_per_million_tokens": "15.00"
  }
]

Endpoint ini serasi dengan OpenAI, jadi klien sedia ada akan berfungsi selepas anda menukar URL asas.

curl https://api.moonshot.ai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -d '{"model": "kimi-k3", "messages": [{"role": "user", "content": "Say hello."}]}'

Kunci yang berfungsi akan mengembalikan objek JSON dengan tatasusunan choices. 401 bermaksud kunci tersebut salah atau awalan Bearer tiada. Ralat model-not-found biasanya bermaksud ID telah berubah, kerana penyedia menamatkan ID antara titik semakan (checkpoint).

Sekarang, mari lihat titik pulang modal menggunakan kadar sewaan yang diandaikan di atas. Nod 8 GPU yang sentiasa aktif berharga 14,400 USD sebulan, dan pada 15.00 USD bagi setiap juta token output, jumlah wang yang sama boleh membeli kira-kira 960 juta token output daripada API. Untuk menjimatkan kos, anda perlu menjana hampir satu bilion token output sebulan, kira-kira 30 juta sehari, dan memastikan kluster sentiasa sibuk sepanjang masa, kerana GPU yang melahu tetap dikenakan bayaran pada kadar yang sama seperti GPU yang sibuk. Beban kerja ejen yang berat dengan prompt akan menjadikan sasaran ini lebih sukar dicapai: konteks yang berulang dikenakan bayaran pada kadar cache-hit sebanyak 0.30 USD bagi setiap juta, bukannya kadar cache-miss sebanyak 3.00 USD.

Apa yang anda hoskan sendiri dalam tahap ini ialah segala-galanya di sekitar model: gerbang (gateway) yang menyimpan kunci API supaya ia tidak pernah sampai ke klien, log permintaan dan respons, percubaan semula (retries), had kadar (rate limits), dan bajet bagi setiap pengguna. Ia berjalan pada VPS kecil tanpa sebarang GPU. Pembahagian yang sama terpakai untuk model berwajaran tertutup (closed weights), di mana pengehosan sendiri Claude tidak mungkin dilakukan pada peringkat model dan orkestrasi adalah satu-satunya bahagian yang anda miliki.

Timbunan penyajian yang manakah tergolong dalam tier yang mana

Pelayan kelas vLLM dan SGLang tergolong dalam tier 1. Ia wujud untuk menyajikan banyak permintaan serentak, dengan continuous batching dan paged KV cache, serta tensor dan expert parallelism yang tersebar merentasi beberapa nod. Ia mengandaikan penggunaan pemecut pusat data dan sambungan pantas antara nod tersebut. Pada satu kad pengguna (consumer card), ia lebih berat untuk dipasang dan tidak memberikan kelebihan yang ketara.

llama.cpp dan Ollama tergolong dalam tier 2. Ia menyasarkan satu mesin, kuantisasi GGUF, offload CPU apabila model tidak muat, dan konkurensi rendah. Secara teknikal, llama.cpp akan memuatkan MoE yang besar dengan menyimpan kebanyakan lapisan dalam RAM sistem, dan bagi model 2.8T, laluan tersebut diukur dalam saat bagi setiap token. Ini membuktikan fail tersebut boleh diurai. Ia bukanlah servis yang boleh anda sediakan untuk pengguna. Perbandingan penuh ada dalam Ollama berbanding vLLM, dan ia tidak berubah mengikut model: persoalannya sentiasa sama ada anda menyajikan ramai pengguna pada perkakasan kongsi atau seorang pengguna pada perkakasan sendiri.

Empat angka yang mengatasi titik semakan ini

  1. Jumlah parameter didarab dengan bait bagi setiap pemberat memberikan lantai memori. Tiada apa-apa yang boleh berjalan di bawahnya, dan tiada helah kuantisasi yang mengubahnya dengan ketara sebaik sahaja keluaran tersebut sudah berada pada 4-bit.
  2. Parameter aktif memberikan kelas daya pemprosesan. Model MoE 2.8T dengan 104B aktif mengira seperti model 104B.
  3. KV cache bagi setiap token, didarab dengan panjang konteks, didarab dengan konkurensi, ialah kos yang terus meningkat selepas anda membayar untuk pemberat.
  4. Token sesaat bagi setiap dolar ialah satu-satunya angka yang menentukan tahap. Semua perkara di atas adalah input kepadanya.

Gunakan keempat-empat perkara tersebut pada mana-mana keluaran dan anda akan mendapat jawapan yang tepat sebelum membuka panduan vendor. Kemudian, letakkan tarikh pada setiap angka yang anda tulis. Harga dan senarai seni bina yang disokong kedua-duanya berubah dalam tempoh dua minggu selepas K3 dilancarkan, dan setiap angka pada halaman ini adalah angka yang diterbitkan pada Julai 2026.

FAQ

Bolehkah saya menjalankan Kimi K3 pada satu GPU?

Tidak. Berat model adalah sekitar 1.4 TB pada ketepatan MXFP4 yang dibekalkan oleh Moonshot, manakala pemecut tunggal terbesar yang dijual hanya mempunyai kapasiti 288 GB. Model MoE tidak boleh menstrim pakar yang tidak aktif daripada cakera pada kelajuan yang boleh digunakan, kerana penghala (router) mungkin memilih mana-mana pakar untuk mana-mana token dan pengambilan data melalui PCIe mengambil masa yang jauh lebih lama daripada belanjawan token yang dibenarkan. Penempatan K3 yang paling kecil dan munasabah ialah nod berbilang GPU, dan resipi yang diterbitkan menggunakan 32 pemecut atau lebih.

Berapakah VRAM yang diperlukan oleh Kimi K3?

Mulakan dengan 1.4 TB untuk berat model sahaja, iaitu bersamaan dengan 18 kad H100 80GB atau 5 kad kelas GB300. Kemudian, tambahkan memori untuk KV cache dan pengaktifan. Setakat Ogos 2026, Moonshot mengesyorkan 64 pemecut atau lebih, dan buku panduan SGLang menerbitkan konfigurasi 32 GPU H100 dengan jumlah keseluruhan 2,560 GB, jadi anggap angka berat tersebut sebagai nilai minimum dan bukannya keperluan sebenar.

Adakah kuantisasi membolehkan Kimi K3 dimuatkan dalam satu nod?

Tidak secara praktikal. Pusat pemeriksaan (checkpoint) yang dikeluarkan sudah pun menggunakan 4-bit dengan latihan yang peka terhadap kuantisasi, jadi penjimatan yang mudah telah pun diambil. Mengurangkan separuh lagi kepada 2-bit menjadikan berat model kepada 0.7 TB, yang masih lebih dua kali ganda daripada kapasiti kad terbesar, dan kos ketepatan bagi 2-bit belum diukur pada model ini.

Adakah menyewa GPU lebih murah daripada API Kimi K3?

Hanya pada volum yang tinggi dan stabil. Dengan andaian 2.50 USD sejam bagi setiap GPU, nod 8 GPU yang sentiasa aktif menelan kos 14,400 USD sebulan, dan jumlah wang yang sama boleh membeli kira-kira 960 juta token output pada kadar yang diterbitkan iaitu 15.00 USD bagi setiap juta. Anda juga perlu membayar untuk jam melahu, muat turun berat model, dan kos tenaga kerja yang menyelenggara kluster tersebut. Sewa mengikut jam untuk penggunaan secara lonjakan, dan buat perbandingan berdasarkan volum token anda sendiri yang telah diukur dan bukannya berdasarkan anggaran.

Apakah maksud 104B parameter aktif bagi kelajuan?

Ini bermakna aritmetik bagi setiap token adalah setara dengan model 104B, jadi daya pemprosesan (throughput) berada dalam kelas tersebut dan bukannya kelas 2.8T. Ini tidak menyatakan apa-apa tentang memori: kesemua 2.8T parameter perlu kekal dalam memori, kerana penghala boleh memanggil mana-mana pakar untuk mana-mana token. Gunakan kiraan aktif untuk meramal token sesaat, dan gunakan jumlah kiraan keseluruhan untuk menentukan saiz VRAM.

#kimi-k3#self-hosted-llm#gpu#vram#inference