Pengaturan untuk Menjalankan Model MoE 744B Tanpa Henti di MacBook RAM 32GB dan Workstation
TuBrief 편집팀
2026년 8월 24일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
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.
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.
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 |
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.
Instal fio dengan package manager:
`bash
sudo apt-get install fio
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.
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.
Buat file /etc/sysctl.d/99-colibri-memory.conf dan masukkan konten berikut:
`ini
vm.swappiness = 1
vm.overcommit_memory = 1
vm.min_free_kbytes = 2097152
vm.vfs_cache_pressure = 50
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.
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.
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
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
ulimit -l unlimited
export OMP_NUM_THREADS=16
export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores
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.