Laptop Anda dapat menjalankan model parameter 70B di balik endpoint berbentuk OpenAI yang sama dengan yang Anda gunakan dalam produksi. Ganti satu URL dasar dan kode Anda tetap berfungsi. Perubahan tunggal itu membuka pengembangan offline, biaya per-token nol, dan jalur pribadi untuk data yang diatur, itulah sebabnya Hacker News mendorong “AI Lokal harus menjadi norma” dari 633 menjadi 1.760 poin dalam sehari. Artikel di bawah ini menunjukkan cara memilih runtime, mengekspos endpoint, mengarahkan klien Anda ke sana, dan menguji seluruh alur dengan Apidog sebelum mempromosikan perubahan apa pun ke model yang di-host.
TL;DR
Anda dapat menjalankan API LLM lokal di laptop Anda dengan Ollama, vLLM, atau llama.cpp, dan masing-masing mengekspos endpoint REST yang kompatibel dengan OpenAI. Ubah base_url menjadi http://localhost:11434/v1 di klien OpenAI Anda yang sudah ada dan kode yang sama akan berjalan terhadap Llama 3.3, DeepSeek V4, atau Qwen 3.6 tanpa penulisan ulang. Jalankan seluruh alur dari Apidog agar pengujian skenario Anda tetap identik di seluruh lingkungan lokal dan hosted.
Pendahuluan
Tumpukan API LLM lokal beralih dari 'mainan penelitian' menjadi 'pengendara harian' dalam delapan belas bulan. Apple mengirimkan memori terpadu 128 GB pada M3 Max. Ollama mencapai satu juta unduhan mingguan. vLLM melewati batas 30.000 bintang GitHub. Namun, perubahan terbesar adalah sosial. Setiap runtime utama sekarang berbicara format OpenAI /v1/chat/completions. Anda tidak lagi mempertahankan dua jalur klien. Panggilan SDK yang sama mencapai localhost atau api.openai.com berdasarkan satu variabel lingkungan.
Ini penting bagi pengembang API karena peralatan Anda yang sudah ada tetap berfungsi. Template permintaan Anda di Apidog menunjuk ke https://api.openai.com/v1/chat/completions. Ganti variabel URL dasar, tekan Kirim, dan Anda akan mendapatkan JSON yang sama kembali dari model yang berjalan di GPU Anda sendiri. Tidak ada skema baru. Tidak ada alur otentikasi baru. Jika Anda sudah melacak pengeluaran API per fitur, Anda dapat melakukan A/B testing model lokal terhadap model hosted dan melihat garis biaya menurun sementara latensi meningkat.
Panduan ini membahas pilihan runtime, pengaturan server, koneksi klien, pengujian skenario, trade-off kuantisasi, dan tabel biaya-vs-latensi untuk empat model saat ini. Contoh kode diuji terhadap Ollama 0.6 dan vLLM 0.7 di macOS 15.4 dan Ubuntu 24.04. Untuk gambaran pilihan yang lebih luas, lihat LLM Lokal Terbaik 2026. Referensi eksternal untuk setiap klaim berada di bagian bawah.
Mengapa LLM lokal masuk akal bagi pengembang API
Anda mengirimkan kode yang memanggil LLM. Anda juga men-debug kode tersebut di pesawat, di konferensi dengan Wi-Fi buruk, dan di dalam jaringan pelanggan yang memblokir keluar ke *.openai.com. API LLM lokal memberi Anda lingkungan pengembangan yang mencerminkan produksi tanpa ketergantungan jaringan.
Aspek privasi adalah yang paling menonjol. HIPAA, GDPR, dan UU AI UE semuanya memperlakukan prompt sebagai data pengguna saat mereka menyertakan catatan pasien, kontrak, atau pengenal biometrik. Mengirimkan payload tersebut ke endpoint yang di-host menciptakan hubungan pemroses data yang harus Anda dokumentasikan, audit, dan perbarui. Model yang tidak pernah meninggalkan perangkat keras Anda melewatkan semua birokrasi itu sepenuhnya. Panduan Dewan Perlindungan Data Eropa tahun 2024 tentang pemrosesan AI mencatat bahwa inferensi di perangkat menghilangkan sebagian besar kewajiban transfer lintas batas berdasarkan Pasal 44.
Biaya bertambah ke arah lain. Tim yang menjalankan 50 juta token prompt per hari melalui GPT-5.5 Instant membayar sekitar $250 per hari dengan $5 per juta token. Volume yang sama pada M3 Max studio seharga $4.500 akan mencapai titik impas (amortisasi nol) setelah delapan belas hari pemanfaatan penuh, mengabaikan biaya listrik. Anda dapat membaca rincian angka-angka tersebut di Cara menggunakan GPT-5.5 Instant dan menerapkan aritmetika yang sama pada beban kerja Anda sendiri.
Alasan ketiga adalah determinisme. Model yang di-host mengubah bobot di belakang Anda. Halaman penghentian model OpenAI mencantumkan sebelas penghentian snapshot dalam dua belas bulan terakhir. Model lokal adalah file di disk. Ini menghasilkan logit yang sama hari ini dan dalam tiga tahun. Stabilitas itu penting ketika rangkaian regresi Anda bergantung pada keluaran LLM. Endpoint yang kompatibel dengan OpenAI mengubah permainan karena Anda tidak lagi membayar 'pajak integrasi' untuk stabilitas itu. SDK yang sudah Anda gunakan berfungsi.
Tiga runtime yang menyediakan endpoint yang kompatibel dengan OpenAI
Empat runtime mendominasi ruang API LLM lokal pada tahun 2026. Tiga di antaranya menyediakan server REST yang kompatibel dengan OpenAI secara langsung. Yang keempat, llama.cpp, menyertakannya sebagai bagian dari biner llama-server-nya. Pilih berdasarkan beban kerja, bukan popularitas.
Ollama
Ollama adalah jalur masuk termudah. Satu biner, satu CLI, satu server HTTP di port 11434. Ini menargetkan pengembang yang menjalankan satu model di satu mesin dan menangani unduhan model, kuantisasi GGUF, serta template prompt untuk Anda.

## install on macOS
brew install ollama
ollama serve &
ollama pull llama3.3:70b-instruct-q4_K_M
ollama run llama3.3:70b-instruct-q4_K_M
Setelah ollama serve berjalan, endpoint yang kompatibel dengan OpenAI berada di http://localhost:11434/v1. Ini mendukung obrolan, embeddings, dan streaming. Batas throughput pada M3 Max dengan model 70B Q4_K_M berada di sekitar 12 token per detik. Model yang lebih kecil mencapai 80 hingga 120 token per detik. Ollama adalah pilihan yang tepat untuk pengembangan pengguna tunggal, demo, dan CI runner.
vLLM
vLLM adalah opsi kelas produksi. Ini menggunakan PagedAttention dan batching berkelanjutan untuk meningkatkan throughput dua hingga empat kali lebih tinggi daripada runner biasa. Ini melayani di port 8000 secara default dan mengekspos API yang kompatibel dengan OpenAI di /v1. Anda dapat membaca detail arsitektur di makalah vLLM pada referensi Kwon et al. SOSP 2023 di bawah ini.

pip install vllm
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--port 8000 \
--gpu-memory-utilization 0.9 \
--max-model-len 8192
Pada satu H100, vLLM melayani Llama 3.3 70B pada sekitar 2.400 token per detik di seluruh permintaan bersamaan. Ini membutuhkan GPU CUDA atau kartu AMD ROCm terbaru dan tidak berjalan di Apple Silicon, yang menjadikannya pilihan yang salah untuk laptop dan pilihan yang tepat untuk kluster pengembangan bersama.
llama.cpp
llama.cpp adalah runtime C++ yang memulai ekosistem GGUF. Ini berjalan di mana saja, mulai dari Raspberry Pi 5 hingga rig dual-RTX-5090. Biner llama-server-nya berbicara format OpenAI pada /v1/chat/completions.

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j LLAMA_METAL=1
./llama-server -m models/llama-3.3-70b-q4_k_m.gguf \
--port 8080 --host 0.0.0.0 -c 8192 -ngl 99
Flag -ngl 99 mengalihkan semua lapisan ke GPU. llama.cpp memberi Anda kontrol paling besar atas kuantisasi, batching, dan pemetaan memori. Ini adalah pilihan yang tepat ketika Anda perlu menempatkan model ke dalam 16 GB VRAM atau menguji perangkat keras eksotis.
LM Studio dan Jan membungkus llama.cpp dalam GUI dan juga mengekspos endpoint OpenAI pada port yang dapat dikonfigurasi. Mereka berguna untuk pengguna non-teknis di tim Anda yang perlu menguji prompt tanpa menyentuh terminal.
Pemeriksaan Python sederhana bahwa endpoint berfungsi:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
resp = client.chat.completions.create(
model="llama3.3:70b-instruct-q4_K_M",
messages=[{"role": "user", "content": "Reply with the word OK only."}],
)
print(resp.choices[0].message.content)
Jika Anda melihat OK, runtime, port, dan kontrak SDK semuanya cocok. Anda siap untuk mengintegrasikan endpoint ke dalam peralatan Anda.
Uji LLM lokal Anda dengan Apidog
API LLM lokal hanya berguna jika rangkaian pengujian Anda dapat memanggilnya dengan cara yang sama seperti memanggil produksi. Apidog menanganinya dengan variabel lingkungan pada template permintaan, yang berarti satu proyek mencakup kedua target.

Alurnya memiliki lima langkah.
- Buka proyek Apidog Anda dan buat lingkungan baru bernama
Local. Tambahkan variabelBASE_URLdengan nilaihttp://localhost:11434/v1. TambahkanAPI_KEYdengan nilaiollama. Simpan. - Kloning lingkungan OpenAI Anda yang sudah ada, ganti namanya menjadi
Production, pertahankanBASE_URLsebagaihttps://api.openai.com/v1danAPI_KEYsebagai kunci hosted Anda. - Dalam setiap permintaan yang memanggil endpoint obrolan, ganti host yang di-hardcode dengan
{{BASE_URL}}dan header otentikasi denganBearer {{API_KEY}}. URL permintaan menjadi{{BASE_URL}}/chat/completions. - Buat pengujian skenario yang memicu permintaan, menegaskan
choices[0].message.role == "assistant", menegaskanchoices[0].message.contenttidak kosong, dan menegaskanusage.total_tokens > 0. Simpan skenarionya. - Jalankan skenario terhadap
Local. Alihkan dropdown lingkungan keProduction. Jalankan lagi. Asersi harus berhasil untuk keduanya.
Skenario yang sama berfungsi ganda sebagai pengujian smoke untuk peningkatan runtime. Setelah ollama pull pada tag baru, jalankan ulang skenario Local. Jika bentuk respons berubah, Anda akan mengetahuinya sebelum kode aplikasi apa pun menyentuh bobot baru. Pola ini meluas ke pengujian agen AI yang memanggil API multi-langkah.
Untuk penggunaan terprogram, OpenAI Python SDK beralih target dengan satu argumen kata kunci:
import os
from openai import OpenAI
def get_client():
if os.getenv("ENV") == "local":
return OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama",
)
return OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = get_client()
response = client.chat.completions.create(
model=os.getenv("MODEL", "llama3.3:70b-instruct-q4_K_M"),
messages=[
{"role": "system", "content": "You are a JSON-only assistant."},
{"role": "user", "content": "Return {\"status\": \"ok\"}."},
],
response_format={"type": "json_object"},
)
print(response.choices[0].message.content)
Bentuk JavaScript mencerminkan ini:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.ENV === "local"
? "http://localhost:11434/v1"
: "https://api.openai.com/v1",
apiKey: process.env.ENV === "local" ? "ollama" : process.env.OPENAI_API_KEY,
});
const resp = await client.chat.completions.create({
model: process.env.MODEL || "llama3.3:70b-instruct-q4_K_M",
messages: [{ role: "user", content: "Say hi." }],
});
console.log(resp.choices[0].message.content);
Sematkan runner skenario Apidog ke CI Anda dengan mengekspor proyek sebagai koleksi apidog-cli dan memanggil apidog run di GitHub Actions. Runner mengembalikan exit non-nol pada kegagalan asersi, yang menggagalkan build saat kontrak lokal atau hosted menyimpang. Insinyur QA dapat mengintegrasikan alur yang sama ke dalam pipeline pengujian API yang sudah ada.
Teknik Lanjutan dan Tips Pro
Kuantisasi adalah tuas yang menentukan apakah model 70B dapat dimuat di laptop Anda. Format GGUF menyimpan bobot pada 8, 6, 5, 4, 3, atau 2 bit per parameter. Q4_K_M adalah default karena suatu alasan. Ini kehilangan 0,6 poin persentase pada benchmark MMLU dibandingkan FP16 dan menyusutkan model 70B dari 140 GB menjadi 40 GB. Q8 membuat Anda dalam 0,1 poin dari FP16 tetapi menggandakan jejak disk dan RAM. Q2_K menghemat ruang tetapi dampak perplexity terlihat dalam tugas apa pun dengan konteks panjang. Pilih Q4_K_M untuk obrolan, Q8 untuk pembuatan kode, dan Q5_K_M ketika Anda memiliki RAM dan menginginkan margin keamanan.
Offload GPU melalui flag -ngl di llama.cpp atau opsi num_gpu di Ollama mengontrol berapa banyak lapisan transformer yang berada di GPU. Atur setinggi yang diizinkan VRAM Anda. Setiap lapisan yang kembali ke CPU mengurangi throughput sekitar 30 persen. Pada kartu 24 GB, model 70B Q4 dapat memuat 40 dari 80 lapisan. Pada 48 GB Anda dapat memuat seluruh tumpukan.
Pemetaan memori (mmap) aktif secara default di llama.cpp dan Ollama. Ini memungkinkan OS memuat bobot sesuai permintaan alih-alih mengalokasikan model penuh saat startup. Biarkan aktif kecuali Anda berjalan dalam wadah dengan batas memori yang ketat. Dengan mmap nonaktif, latensi token pertama turun sekitar 200 ms tetapi penggunaan RAM berlipat ganda.
Batching adalah kekuatan super vLLM. Kirim 32 permintaan bersamaan dan vLLM mengelompokkannya menjadi satu pass GPU. Throughput berskala mendekati linear ke batas komputasi GPU. Atur --max-num-seqs 64 untuk laptop dengan memori CPU bersama dan --max-num-seqs 256 untuk perangkat keras kelas H100.
Respons streaming mengurangi latensi yang dirasakan menjadi separuhnya. Atur stream=True di OpenAI SDK dan server akan mengirim token saat dihasilkan. Byte pertama tiba dalam 200 hingga 500 ms daripada menunggu penyelesaian penuh. Setiap runtime dalam panduan ini mendukungnya.
Modelfile Ollama memungkinkan Anda memasukkan prompt sistem, suhu, dan urutan penghentian ke dalam model bernama sehingga kode aplikasi Anda tetap bersih. Jalankan ollama create my-assistant -f Modelfile sekali dan klien Anda akan menunjuk ke my-assistant alih-alih mengulang prompt sistem di setiap permintaan.
Kesalahan Umum
- Melakukan hardcoding
http://localhost:11434dalam kode produksi. Gunakan variabel lingkungan. - Lupa bahwa model lokal tidak menerapkan
max_tokens. Mereka akan dengan senang hati menghasilkan 4.096 token yang tidak perlu. Atur urutan penghentian. - Menjalankan Ollama dan runtime lain di port yang sama. Keduanya default ke port yang bersih, tetapi port kustom bertabrakan secara diam-diam.
- Melewatkan header
Authorization. Ollama mengabaikannya, tetapi vLLM dengan--api-keyakan menolak permintaan yang tidak terautentikasi dengan 401. - Memuat model Q4 dan mengharapkan kualitas GPT-5.5 pada matematika. Kuantisasi mengikis penalaran paling cepat.
Lokal vs Hosted: Perhitungan Biaya dan Latensi
Angka-angka di bawah mengasumsikan M3 Max dengan memori terpadu 128 GB untuk lokal, dan harga publik saat ini untuk endpoint hosted. Waktu token pertama (TTFT) diukur dalam kondisi 'dingin', tanpa batching, pada prompt 1.024 token.
| Model | TTFT Lokal | Throughput Lokal | Setara Hosted | Harga Hosted | TTFT Hosted |
|---|---|---|---|---|---|
| Llama 3.3 70B Q4_K_M | 1.2 dtk | 12 tok/dtk | GPT-5.5 Instant | $5 / $30 per 1 Juta | 200 ms |
| DeepSeek V4 67B Q4_K_M | 1.4 dtk | 10 tok/dtk | DeepSeek-Chat hosted | $0.55 / $2.20 per 1 Juta | 280 ms |
| Qwen 3.6 32B Q5_K_M | 0.7 dtk | 28 tok/dtk | Qwen-Max hosted | $1.60 / $6.40 per 1 Juta | 240 ms |
| Gemma 4 27B Q4_K_M | 0.5 dtk | 35 tok/dtk | Gemini 3 Flash | $0.35 / $1.05 per 1 Juta | 180 ms |
Kolom hosted selalu unggul dalam latensi. Kolom lokal unggul dalam biaya saat Anda melewati sekitar 10 juta token per hari, dan unggul dalam privasi sejak permintaan pertama. Untuk pengembangan, Anda hampir selalu menginginkan lokal. Untuk produksi yang berhadapan dengan pengguna, Anda hampir selalu menginginkan hosted, kecuali klasifikasi data Anda melarangnya.
Pola praktis: jalankan lokal selama siklus pengembangan internal, beralih ke hosted di staging, jaga kedua target tetap hijau di CI. Pengujian skenario Apidog dari bagian di atas mendukung pola itu dengan satu sakelar lingkungan. Untuk benchmark yang lebih mendalam pada model individu, lihat Cara menjalankan DeepSeek V4 secara lokal dan panduan penggunaan DeepSeek V4 yang asli.
Kasus Penggunaan Dunia Nyata
Tim kepatuhan fintech di Singapura menggunakan Ollama di laptop insinyur untuk menyusun laporan aktivitas mencurigakan. Prompt tersebut berisi nomor rekening dan pola transaksi yang tidak boleh meninggalkan negara di bawah aturan MAS. Endpoint hosted yang mereka gunakan dalam produksi mendapatkan versi yang disunting dari prompt yang sama. Skenario Apidog menegaskan bahwa redactor berjalan pada setiap permintaan sebelum meninggalkan localhost.
Sebuah studio game di Stockholm melatih intern desainer tentang rekayasa prompt dengan instans Qwen 3.6 lokal. Gratis, offline, dan mustahil membocorkan lore game berikutnya kepada pihak ketiga. Proyek yang sama dikirimkan terhadap Gemini 3 Flash dalam produksi dengan satu perubahan variabel lingkungan. Mereka menggunakan kembali panduan API Gemini 3 Flash untuk koneksi produksi.
Startup perawatan kesehatan menjalankan vLLM pada A100 yang disewa di dalam jaringan rumah sakit pelanggan. Endpoint tidak pernah terlihat oleh DNS publik. Pengujian integrasi mereka berjalan dari agen Jenkins di VLAN yang sama terhadap SDK OpenAI yang sama yang mereka gunakan secara lokal. Kode yang sama, tiga target deployment, satu rangkaian skenario.
Kesimpulan
Tumpukan API LLM lokal berkembang pesat. Anda dapat memindahkan prompt Anda dari endpoint hosted tanpa menulis ulang klien, pengujian, atau CI Anda. Lima langkah yang mewujudkannya:
- Pilih Ollama untuk laptop, vLLM untuk kluster dev bersama, llama.cpp untuk anggaran memori yang ketat.
- Ekspos endpoint yang kompatibel dengan OpenAI dan verifikasi dengan satu baris curl.
- Pindahkan
base_urldanapi_keyke variabel lingkungan sehingga kode yang sama dapat memanggil lokal dan hosted. - Buat pengujian skenario di Apidog yang berjalan identik di kedua lingkungan.
- Perhatikan tabel biaya-vs-latensi dan pilih target yang tepat per beban kerja.
Sinyal HN yang mendorong “AI Lokal harus menjadi norma” melewati 1.700 poin adalah hasil dari kematangan ini. Setelah permukaan API stabil, setiap alat pengembang langsung menyesuaikan diri dengannya. Unduh Apidog dan arahkan satu lingkungan ke http://localhost:11434/v1 untuk melihat seberapa cepat siklusnya tertutup. Jika Anda belum memilih model, mulailah dengan LLM Lokal Terbaik 2026, dan jika Anda ingin menyelami lebih dalam pengujian alur agensial di atas endpoint ini, baca Cara menguji API agen AI.
