Kapasitas GPU Jakarta: Menakar VRAM untuk Tim AI Indonesia

Foto oleh Timothy Borkowski via Wikimedia Commons (CC BY-SA 3.0)
Weights saja adalah jumlah parameter dikali bytes per parameter, jadi model 70 miliar parameter berarti sekitar 140 GB di BF16. Model card Sahabat AI 70B menyebut angka sekitar 140 GB dan merekomendasikan dua NVIDIA H100 atau empat L40s. Di atas itu Anda masih butuh memori tambahan untuk KV cache, activation, dan overhead runtime, sehingga setup yang direkomendasikan menyisakan ruang jauh lebih sedikit daripada yang terlihat.
Karena weights hanya suku pertama dari tiga suku. KV cache tumbuh mengikuti context length dikali jumlah sequence yang berjalan bersamaan, sementara activation dan overhead framework mengambil jatah lagi. Konfigurasi yang termuat mulus dengan satu pengguna uji bisa gagal pada beban puncak semata-mata karena lebih banyak sequence hidup bersamaan.
Tidak. CoreWeave mengumumkan 360 megawatt contracted IT power di Jakarta Raya pada Agustus 2026 yang dijadwalkan beroperasi 2028, dan daya yang dikontrak bukan kartu yang bisa disewa kuartal ini. Rancanglah untuk hardware yang tersedia hari ini, taruh model di balik interface Anda sendiri, dan anggap model itu akan diganti lebih dari sekali sebelum kapasitasnya dibuka.
Model hasil quantisation memakai memori lebih sedikit dengan bayaran presisi yang lebih rendah, dan besar penurunan kualitasnya bergantung pada model, bahasa, dan tugasnya. Jawaban yang bisa dipercaya hanya datang dari menjalankan eval Anda sendiri pada tiap format, bukan dari leaderboard. Perlu diingat juga bahwa quantisation pada weights tidak mengecilkan KV cache, karena cache punya pengaturan dtype tersendiri.
Tidak, dan anggapan itulah yang membuat banyak tim membeli berlebihan. Serving menampung weights ditambah KV cache, sedangkan full fine-tune juga menampung gradient, optimiser state, dan activation, sehingga kebutuhannya adalah kelipatan dari kebutuhan serving. Fine-tuning sifatnya meledak sesaat dan bisa disewa per jam, sementara serving berjalan terus-menerus dan ingin dekat dengan pengguna Anda.

Foto oleh Timothy Borkowski via Wikimedia Commons (CC BY-SA 3.0)
Ringkasan Utama
VRAM yang menentukan GPU mana yang benar-benar bisa dipakai sebuah tim AI Indonesia, dan angkanya adalah jumlah parameter dikali bytes per parameter ditambah KV cache yang tumbuh mengikuti context length dan batch size. Model card Sahabat AI 70B meminta sekitar 140 GB, sehingga dua kartu H100 hanya sanggup menampung weights dan hampir tidak ada sisa. Lakukan quantisation, atau sewa per jam.
Pertanyaannya pendek, jawabannya tidak: GPU apa yang harus saya sewa untuk melayani model berbahasa Indonesia dari Jakarta? Saya membuka model card Sahabat AI 70B dengan harapan menemukan daftar belanja, dan justru menemukan satu kalimat yang menutup sebagian besar pilihan sebelum belanjanya dimulai. Untuk memuat model itu di FP16 atau BF16 dibutuhkan sekitar 140 GB VRAM, dengan dua NVIDIA H100 atau empat L40s sebagai setup yang direkomendasikan.
Tulisan ini adalah aritmetika di balik kalimat tersebut, sekaligus apa yang bisa dilakukan pada kuartal ketika kapasitas AI besar di Jakarta yang ditunggu semua orang masih berstatus kontrak, bukan sesuatu yang bisa disewa. Isinya empat cara tim Indonesia mendapatkan GPU hari ini, cara menakar VRAM sebelum menyewa apa pun, alasan fine-tuning dan serving adalah dua mesin yang berbeda, serta apa yang sebenarnya dibeli dan dikorbankan oleh quantisation.
Mulai dari temuannya: untuk inference Anda tidak sedang berbelanja FLOPS, Anda sedang berbelanja memori. Model yang tidak muat di memori GPU bukan berjalan lambat, melainkan tidak berjalan sama sekali. Suku pertama adalah yang paling mudah — jumlah parameter dikali bytes per parameter. Di BF16 nilainya dua bytes per parameter, jadi model 70 miliar parameter berarti sekitar 140 GB weights sebelum apa pun yang lain dimuat, dan itu persis angka yang ditulis model card Sahabat AI 70B.
// The easy term: parameters x bytes per parameter.
const BYTES_PER_PARAM = { bf16: 2, int8: 1, int4: 0.5 };
function weightsGB(paramsBillion, format) {
return (paramsBillion * 1e9 * BYTES_PER_PARAM[format]) / 1e9;
}
weightsGB(70, "bf16"); // 140 — the figure the Sahabat AI 70B card publishes
weightsGB(70, "int8"); // 70 — one 80 GB card becomes conceivable
weightsGB(70, "int4"); // 35 — before format and scale overhead
// A model card gives you this line and stops. It is never the whole budget.Hitungan ini layak dikerjakan sendiri karena inilah satu-satunya bagian keputusan yang bisa dituntaskan sebelum uang keluar. Throughput, latency, dan biaya per token semuanya bergantung pada traffic yang mungkin belum Anda miliki. Sedangkan muat atau tidaknya weights di kartu yang hendak Anda sewa adalah fakta yang bisa dipastikan dalam sepuluh detik dengan kalkulator, dan fakta itu saja sudah mencoret sebagian besar pilihan.
Suku kedua tumbuh mengikuti traffic Anda, bukan mengikuti ukuran model. Setiap token yang sudah diproses menyimpan satu key dan satu value vector di memori untuk setiap layer, sehingga cache-nya adalah dua, dikali jumlah layer, dikali key-value heads, dikali head dimension, dikali bytes per elemen — per token, per sequence. Config yang dipublikasikan untuk Sahabat AI 70B mencantumkan 80 layer, 8 key-value heads, dan head dimension 128, yang pada dua bytes per elemen menghasilkan 320 KiB cache untuk satu token saja.
// Straight out of the model's published config.json:
const LAYERS = 80; // num_hidden_layers
const KV_HEADS = 8; // num_key_value_heads — GQA, not the 64 attention heads
const HEAD_DIM = 128; // head_dim
const BYTES = 2; // bf16
// Key AND value, every layer, every token, every concurrent sequence.
const perToken = 2 * LAYERS * KV_HEADS * HEAD_DIM * BYTES;
// 327,680 bytes = 320 KiB per token
perToken * 8192; // 2.7 GB — a modest 8k conversation
perToken * 131072; // 42.9 GB — ONE session using the advertised 128k window
// Concurrency multiplies this. Parameter count does not.Angka itu terlihat kecil padahal tidak. Model ini mengiklankan context window 128k, dan pada 320 KiB per token satu percakapan yang benar-benar memakainya butuh sekitar 43 GB KV cache untuk satu pengguna — lebih dari separuh kartu 80 GB. Grouped-query attention sebenarnya sudah menolong di sini: seandainya cache dihitung dari 64 attention heads dan bukan dari 8 key-value heads, aritmetika yang sama akan delapan kali lebih berat.
Tetapkan context length dari p95 panjang prompt di log Anda sendiri, bukan dari angka yang didukung model. Anggaran cache mengikuti angka yang Anda konfigurasikan, sehingga nilai default yang tidak pernah diperiksa adalah pembeda antara kartu yang masih lapang dan kartu yang mulai melakukan preempt saat beban naik.
Gabungkan kedua suku itu dengan hardware yang direkomendasikan, dan bentuk masalahnya langsung terlihat. NVIDIA mencantumkan GPU memory 80 GB untuk H100 SXM dan 48 GB untuk L40S, jadi dua rekomendasi di model card itu berarti total 160 GB dan 192 GB memori untuk model yang weights-nya saja sekitar 140 GB. Kolom terakhir di bawah adalah sisa yang benar-benar dipakai melayani pengguna.
| Setup | Total VRAM | Weights | Sisa untuk cache | Token cache |
|---|---|---|---|---|
| 2 x H100 80GB, BF16 | 160 GB | sekitar 140 GB | sekitar 20 GB | kira-kira 61.000 |
| 4 x L40S 48GB, BF16 | 192 GB | sekitar 140 GB | sekitar 52 GB | kira-kira 159.000 |
| 1 x H100 80GB, 4-bit | 80 GB | sekitar 35 GB | sekitar 45 GB | kira-kira 137.000 |
Bacalah kolom terakhir, bukan kolom pertama. Setup dua H100 yang memenuhi model card hanya menyisakan sekitar enam puluh ribu token cache untuk seluruh request yang berjalan bersamaan, dan itu bahkan belum cukup untuk satu percakapan panjang penuh. Setup empat L40S yang terbaca seperti opsi hemat justru yang punya ruang gerak. Kedua baris itu pun masih optimistis, karena hanya menghitung weights dan cache tanpa kebutuhan runtime.
Versi mahal dari kesalahan ini adalah menakar hanya dari jumlah parameter, terlanjur terikat kontrak sewa, lalu berkenalan dengan KV cache saat concurrency sungguhan datang. Weights adalah biaya tetap yang dibayar sekali saat load; cache adalah biaya variabel yang datang bersama pengguna, dan itulah yang mengubah konfigurasi yang lolos pengujian menjadi out-of-memory pada jam sibuk.
Ada empat pilihan nyata, dan perbedaannya lebih terasa pada apa yang direbut dari Anda ketimbang pada harganya. Managed inference API menghapus seluruh aritmetika di atas dan tidak menagih apa pun saat idle, dengan konsekuensi Anda hanya bisa memakai model yang ada di daftar vendor dan prompt Anda dikirim ke region mereka. Menyewa GPU per jam di neocloud luar negeri memberi pilihan tipe kartu paling luas dan penagihan per jam, dengan konsekuensi egress, satu perjalanan bolak-balik keluar Indonesia, dan server yang Anda operasikan sendiri.
Menyewa di dalam negeri sering dianggap substitusi langsung, padahal bukan: di tempat opsi ini tersedia, daftar tipe kartunya lebih sempit, sehingga ketersediaanlah yang cenderung menentukan model Anda dan bukan sebaliknya. Membeli atau colocation hardware adalah satu-satunya pilihan yang membuat jam idle menjadi gratis dan semua biaya lain menjadi milik Anda — impor, listrik, pendinginan, suku cadang, serta kartu yang tetap menyusut nilainya entah ada yang memakai atau tidak. Saya tidak akan membeli apa pun sebelum punya satu bulan data utilisasi terukur yang benar-benar penuh.

Menyamakan keduanya adalah kesalahan paling mahal di area ini, karena kebutuhan memori fine-tuning adalah kelipatan dari kebutuhan serving, bukan angka yang sama. Serving menampung weights ditambah KV cache. Full fine-tune menampung weights, gradient sebesar weights yang dilatih, optimiser state untuk setiap parameter yang dilatih, serta activation yang membesar mengikuti batch size dan panjang sequence — semuanya sebelum satu pengguna pun dilayani.
Konsekuensi praktisnya, kedua pekerjaan itu sebaiknya dibeli dengan cara yang berbeda. Fine-tuning sifatnya meledak sesaat, ada ujungnya, dan tahan menunggu antrean, sehingga paling pas disewa per jam pada kartu apa pun yang tersedia minggu ini, termasuk di luar Indonesia bila data latihannya memungkinkan. Serving berjalan terus-menerus, sensitif terhadap latency, dan ingin duduk dekat pengguna. Tim yang menakar satu cluster untuk keduanya berakhir membayar hardware berbentuk training selama dua puluh empat jam sehari. Metode adapter seperti LoRA mengubah suku fine-tuning secara dramatis karena hanya melatih sebagian kecil parameter, dan sama sekali tidak mengubah suku serving — base model tetap dimuat utuh.
Bytes per parameter adalah satu-satunya suku dalam aritmetika weights yang benar-benar Anda kendalikan, dan itulah alasan quantisation menggeser jawabannya lebih jauh daripada apa pun di daftar ini. Dua bytes per parameter menaruh model 70B di 140 GB; satu byte menaruhnya di 70 GB; empat bit mendekatkannya ke 35 GB sebelum overhead format dan scale. Itu bukan penghematan, itu perpindahan kategori — beda antara sewa dua kartu yang harus dipesan lebih dulu dan satu kartu 80 GB yang bisa diambil per jam.
Ongkos jujurnya, model hasil quantisation memakai memori lebih sedikit dengan bayaran presisi yang lebih rendah, seperti ditulis dokumentasi vLLM sendiri, dan seberapa besar kualitas yang hilang sangat bergantung pada model, bahasa, dan tugas Anda. Ada jebakan kedua yang perlu diketahui: quantisation pada weights tidak berpengaruh sama sekali pada KV cache, karena cache adalah alokasi terpisah dengan dtype-nya sendiri. Kalau yang memenuhi kartu Anda adalah context panjang, dtype cache-lah tuas yang Anda cari, dan vLLM menyediakannya sebagai kv-cache-dtype secara terpisah dari format weights.
Eksperimen termurah di sepanjang tulisan ini adalah menjalankan eval Anda sendiri pada model yang lebih kecil sebelum menyewa yang lebih besar. Model 9 miliar parameter di BF16 hanya sekitar 18 GB weights dan menyisakan sebagian besar satu kartu L40S 48 GB untuk cache. Kalau model itu lolos, seluruh aritmetika dua kartu tadi tidak berlaku untuk Anda.
Hal terakhir yang harus diluruskan adalah waktu. Pada Agustus 2026 CoreWeave mengumumkan tiga data centre di Indonesia dengan 360 megawatt contracted IT power di Jakarta Raya, yang dijadwalkan beroperasi pada 2028. Itu komitmen nyata dan benar-benar mengubah apa yang bisa dibeli tim Indonesia — pada 2028. Daya yang dikontrak bukanlah kartu yang sudah terpasang di slot, dan startup yang menyusun rencana kuartal ini di atasnya sedang merencanakan hardware yang belum ada.
Jadi rancanglah untuk hardware yang bisa Anda dapatkan hari ini, dan jadikan pilihan model sebagai nilai konfigurasi, bukan asumsi arsitektur. Taruh model di balik interface Anda sendiri, jaga agar prompt dan eval tetap mudah dipindahkan, lalu perlakukan kartu di bawahnya sebagai sesuatu yang akan Anda ganti dua kali sebelum kapasitas itu dibuka. Tim yang paling siap pada 2028 adalah tim yang sudah melayani traffic sungguhan dengan sewa per jam pada 2026, karena merekalah yang tahu persis apa yang harus diminta.

Ketiga lapis itu harus dianggarkan sebelum Anda bisa menyebut satu nama kartu, jadi urutan kerjanya adalah aritmetika dulu, hardware terakhir. Inilah urutan yang akan saya ikuti untuk produk Indonesia yang dirilis sekarang.
# Bound every term explicitly. The defaults suit a benchmark, not your traffic.
vllm serve GoToCompany/Llama-Sahabat-AI-v2-70B-IT \
--tensor-parallel-size 2 \
--max-model-len 8192 \
--max-num-seqs 4 \
--gpu-memory-utilization 0.92 \
--kv-cache-dtype fp8
# --tensor-parallel-size 2 splits the 140 GB of weights across both H100s
# --max-model-len 8192 where the KV cache term is really bounded — not by the card
# --max-num-seqs 4 4 x 8192 x 320 KiB = about 10 GB, inside the 20 GB left over
# --gpu-memory-utilization the remainder covers activations, CUDA graphs, fragmentation
# --kv-cache-dtype fp8 halves the cache; a separate decision from the weight format
# Wrong: leave max-model-len at the model default and meet 128k under load.
# Right: set it from the p95 prompt length in your own logs, then raise it deliberately.Langkah terakhir itu hanya satu perintah, dan justru itulah yang paling sering dibiarkan pada nilai default. Setiap flag di bawah memetakan ke satu suku dalam aritmetika di atas, dan itulah intinya: server dikonfigurasi dari angka Anda sendiri, bukan dari angka di model card.
Aturan yang layak dibawa pulang: memori ditakar sebelum apa pun dibelanjakan, dan aritmetika mencoret pilihan jauh lebih cepat daripada brosur vendor mana pun. VRAM terdiri dari tiga suku — parameter, cache, dan overhead — dan ketiganya bisa dihitung di atas kertas dalam satu sore. Jakarta memang akan punya kapasitas jauh lebih besar pada 2028. Yang bisa dilayani tim Anda kuartal ini ditentukan oleh suku yang lupa Anda anggarkan.
Sumber