Pengaturan untuk Menjalankan Model MoE 744B Tanpa Henti di MacBook RAM 32GB dan Workstation
Saat menjalankan model MoE 744B seperti GLM-5.2 secara lokal pada workstation biasa atau MacBook, hambatan utama biasanya muncul pada bandwidth penyimpanan dan kebijakan memori virtual OS, bahkan sebelum kapasitas VRAM habis. colibrì dari JustVugg, mesin inferensi ringan berbasis bahasa C, hanya mengunci layer residen berukuran 17B (9,9 GiB pada standar int4) ke dalam RAM, sementara bobot routing expert yang dibagi menjadi 21.504 bagian (~370 GB) di-streaming secara real-time dari SSD eksternal per token.
Masalahnya adalah jika dijalankan dengan pengaturan default OS, swap thrashing akan terjadi atau OOM Killer kernel akan menghentikan paksa proses tersebut. Generasi token tidak akan berhenti hanya jika Anda menyesuaikan sendiri mulai dari flag kompilasi, antrean I/O NVMe, hingga parameter kernel.
Flag Kompilasi Berdasarkan Arsitektur dan Pengaturan Kumpulan Instruksi Vektor
Mesin komputasi inti colibrì adalah file tunggal C11 berukuran sekitar 1.300 baris tanpa dependensi eksternal. Throughput operasi perkalian matriks bervariasi tergantung pada instruksi vektor SIMD yang digunakan oleh kompiler. Alih-alih build standar -O2, Anda harus menentukan ekstensi instruksi operasi aritmatika integer CPU target secara langsung.
Pembuatan Lingkungan Build dan Kompilasi
Untuk lingkungan Linux x86_64, aktifkan AVX-512 VNNI pada GCC 12 atau yang lebih baru, sedangkan untuk Apple Silicon, hubungkan NEON DotProduct melalui Clang.
Pada sistem berbasis Ubuntu dan Debian, instal terlebih dahulu alat build:
`bash
sudo apt-get install gcc-12 libomp-dev
`
Di lingkungan macOS, dapatkan runtime OpenMP melalui Homebrew:
`bash
brew install libomp
`
Pada mesin Linux x86_64, build dengan target instruksi AVX-512 VNNI:
`bash
gcc -O3 -march=native -mtune=native
-mavx512f -mavx512bw -mavx512vnni -mavx512dq
-fopenmp -funroll-loops -ffast-math
-o colibri_engine colibri_glm52.c -lm
`
Di lingkungan Apple Silicon (seri M), kompilasi dengan menyertakan jalur pustaka secara langsung:
`bash
clang -O3 -mcpu=native
-march=armv8.4-a+dotprod+fp16
-Xpreprocessor -fopenmp
-I/opt/homebrew/opt/libomp/include
-L/opt/homebrew/opt/libomp/lib -lomp
-o colibri_engine colibri_glm52.c -lm
`
Jika muncul peringatan build terkait struktur, lampirkan flag -std=c11 untuk menyelesaikannya.
| Platform |
Kompiler |
Flag Instruksi Vektor |
Paralelisasi Thread |
| x86_64 (Linux) |
GCC 12+ |
-mavx512vnni -mavx512bw |
-fopenmp |
| ARM64 (macOS) |
Apple Clang |
-march=armv8.4-a+dotprod |
-Xpreprocessor -fopenmp |
| x86 Lama |
GCC / Clang |
-mavx2 -mfma |
-fopenmp |
Benchmark SSD Eksternal dan Perluasan Antrean I/O Asinkron
Latensi decoding colibrì ditentukan oleh kecepatan baca acak 1MB pada disk. File parameter routing expert GLM-5.2 dibagi menjadi ukuran masing-masing sekitar 19 MB, sehingga setiap kali token dibuat, thread I/O asinkron membaca chunk yang diperlukan dari SSD.
Pengukuran Bandwidth Pembacaan Penyimpanan melalui fio
Instal fio dengan package manager:
`bash
Linux
sudo apt-get install fio
macOS
brew install fio
`
Ukur bandwidth pembacaan acak dengan ukuran blok 1MB dan kondisi Direct I/O:
`bash
fio --name=colibri_stream_bench
--filename=/Volumes/ExternalSSD/glm52_test.tmp
--size=10G
--rw=randread
--bs=1m
--iodepth=32
--numjobs=4
--ioengine=posixaio
--direct=1
--group_reporting
--runtime=60
`
Antarmuka Thunderbolt 4 atau USB4 (40 Gbps) mempertahankan bandwidth aktual sebesar 2.800–3.200 MB/s dan memberikan kecepatan decoding 0,08–0,10 tok/s. Sebaliknya, jika drive eksternal dihubungkan ke port USB 3.2 Gen2 (10 Gbps) yang bandwidth-nya hanya 900–1.050 MB/s, dibutuhkan waktu lebih dari 80 menit hanya untuk menghasilkan 100 token.
`
+-------------------------------------------------------------------------+
| colibrì C Inference Engine |
| +--------------------------+ +-------------------------------------+ |
| | Dense Weights (9.9 GiB) | | Multi-Token Prediction (MTP) Head |
| | Resident in RAM (mlock) | | int8 Quantized |
| +------------+-------------+ +------------------+------------------+ |
+---------------+-----------------------------------+---------------------+
| |
v v
+-------------------------------------------------------------------------+
| Memory & Storage I/O Layer |
| +--------------------------+ +-------------------------------------+ |
| | Async Expert Readahead | | 21,504 Routed Experts (370 GB) |
| | I/O Queue Depth 3264 | | Streamed from NVMe SSD via mmap |
| +--------------------------+ +-------------------------------------+ |
+-------------------------------------------------------------------------+
`
Dengan meningkatkan kedalaman antrean I/O (iodepth) untuk Async Expert Readahead ke tingkat 32–64, Anda dapat memanfaatkan seluruh saluran paralel pengontrol NVMe untuk mengurangi latensi tunggu disk.
Pengaturan Memori Virtual Kernel dan Pencegahan OOM
Jika bobot residen sebesar 9.9 GiB, KV Cache, dan page cache sistem file dimuat secara bersamaan pada sistem RAM 32 GB, kontensi memori kernel akan terjadi. Pada pengaturan default Linux, panggilan mmap berukuran 370 GB akan diblokir dari alokasi ruang alamat virtual atau OOM Killer akan mematikan mesin.
Penerapan Parameter Kernel Linux
Buat file /etc/sysctl.d/99-colibri-memory.conf dan masukkan konten berikut:
`ini
Mencegah pelepasan memori residen ke swap disk
vm.swappiness = 1
Mengizinkan overcommit memori virtual
vm.overcommit_memory = 1
Mengalokasikan ruang memori buffer darurat (2GB)
vm.min_free_kbytes = 2097152
Meningkatkan rasio retensi cache file disk
vm.vfs_cache_pressure = 50
Memperluas batasan jumlah pemetaan mmap
vm.max_map_count = 524288
`
Setelah menyimpan, terapkan parameter secara instan:
`bash
sudo sysctl --system
`
Buka batasan penguncian memori di sesi shell untuk mengizinkan panggilan mlock() pada layer residen:
`bash
ulimit -l unlimited
`
| Parameter |
Nilai Default |
Nilai Rekomendasi |
Tujuan Pengaturan |
| vm.swappiness |
60 |
1 |
Mencegah bobot 9.9 GiB yang dikunci di RAM terdorong ke area swap |
| vm.overcommit_memory |
0 |
1 |
Mencegah penolakan memori kernel saat pemetaan mmap berukuran 370 GB |
| vm.vfs_cache_pressure |
100 |
50 |
Memperpanjang masa pakai cache file untuk menggunakan kembali bobot expert yang sering dipanggil |
| vm.max_map_count |
65530 |
524288 |
Membuka batasan pemetaan 21.504 file parameter |
| ulimit -l |
64 (KB) |
unlimited |
Memberikan izin penguncian memori fisik (mlock) untuk Dense layer |
Di lingkungan macOS, jika memori kosong habis, dynamic_pager melakukan kompresi memori di latar belakang yang menguras penggunaan CPU. Anda harus menutup aplikasi yang memakan banyak memori sebelum menjalankan program untuk mencegah masuk ke mesin kompresi.
Penempatan Inti CPU (Core Pinning) dan Konfigurasi Skrip Eksekusi
Decoding MoE terus-menerus mengakses cache CPU dan bus memori. Jika Anda salah memilih node NUMA pada workstation multi-socket, kecepatan pembuatan token akan berkurang setengahnya karena hambatan bus interkonek.
Penulisan Skrip Eksekusi Terpadu
Periksa terlebih dahulu nomor node CPU fisik yang terhubung langsung dengan pengontrol NVMe eksternal menggunakan numactl --hardware. Setelah itu, tulis skrip shell yang menghindari alokasi duplikat hyperthreading dan hanya mengunci thread ke inti fisik.
`bash
#!/usr/bin/env bash
set -euo pipefail
1. Pengaturan memori virtual kernel
sudo sysctl -w vm.swappiness=1 > /dev/null
sudo sysctl -w vm.overcommit_memory=1 > /dev/null
sudo sysctl -w vm.max_map_count=524288 > /dev/null
sudo sysctl -w vm.vfs_cache_pressure=50 > /dev/null
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
2. Membuka batasan penguncian memori
ulimit -l unlimited
3. Pengikatan thread OpenMP ke inti fisik
export OMP_NUM_THREADS=16
export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores
4. Eksekusi pengikatan node NUMA 0
ENGINE_BIN="./colibri_engine"
MODEL_PATH="/mnt/nvme_ext/GLM-5.2-colibri-int4-g64-with-int8-mtp"
exec numactl --physcpubind=0-15 --membind=0
"${ENGINE_BIN}"
--model "${MODEL_PATH}"
--threads "${OMP_NUM_THREADS}"
`
Pada MacBook berprosesor Apple Silicon, Anda harus mencegah daemon QoS macOS mengalihkan thread pekerja ke core efisiensi (E-Core). Jalankan dengan memaksa prioritasnya lebih tinggi:
`bash
sudo nice -n -20 taskpolicy -c default ./colibri_engine --model /Volumes/SSD/glm52_i4
`
Setelah menyelesaikan keempat pengaturan ini, Anda dapat memuat model MoE 744B secara stabil melalui metode local disk streaming di workstation RAM 32 GB atau MacBook tanpa mengalami benturan OOM.