Настройка для бесперебойной работы 744B MoE моделей на MacBook и рабочих станциях с 32 ГБ ОЗУ
TuBrief 편집팀
2026년 8월 24일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
При локальном запуске 744B MoE моделей вроде GLM-5.2 на обычной рабочей станции или MacBook узким местом становится не объем VRAM, а пропускная способность накопителя и политика виртуальной памяти операционной системы. colibrì, легковесный инференс-движок на языке C, закрепляет в ОЗУ только резидентные слои размером 17B (9.9 GiB в формате int4), в то время как веса маршрутизируемых экспертов (~370 ГБ), разбитые на 21 504 части, транслируются в реальном времени с внешнего SSD по токенам.
Проблема заключается в том, что при запуске с настройками ОС по умолчанию возникает своп-трешинг или системный убийца процессов (OOM Killer) принудительно завершает работу приложения. Чтобы генерация токенов не останавливалась, необходимо вручную настроить все параметры — от флагов компиляции и очередей NVMe I/O до параметров ядра.
Основной вычислительный движок colibrì представляет собой единый файл на C11 объемом около 1300 строк кода без внешних зависимостей. Производительность матричного умножения зависит от того, какие SIMD-инструкции использует компилятор. Вместо базовой сборки -O2 необходимо явно указать инструкции расширения целочисленной арифметики целевого процессора.
В среде x86_64 Linux активируется AVX-512 VNNI в GCC 12 или выше, а для Apple Silicon через Clang подключаются инструкции NEON DotProduct.
Для систем Ubuntu и Debian сначала устанавливаются инструменты сборки.
`bash
sudo apt-get install gcc-12 libomp-dev
`
В среде macOS среда выполнения OpenMP устанавливается через Homebrew.
`bash
brew install libomp
`
На машине x86_64 Linux сборка выполняется под инструкции 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
`
В среде Apple Silicon (серия M) компиляция выполняется с указанием путей к библиотекам.
`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
`
Если возникают предупреждения компиляции, связанные со структурами, проблему можно решить добавлением флага -std=c11.
| Платформа | Компилятор | Флаги векторных инструкций | Параллелизация потоков |
|---|---|---|---|
| x86_64 (Linux) | GCC 12+ | -mavx512vnni -mavx512bw |
-fopenmp |
| ARM64 (macOS) | Apple Clang | -march=armv8.4-a+dotprod |
-Xpreprocessor -fopenmp |
| Старый x86 | GCC / Clang | -mavx2 -mfma |
-fopenmp |
Задержка декодирования в colibrì определяется скоростью случайного чтения диска блоками по 1 МБ. Файлы весов маршрутизируемых экспертов GLM-5.2 разделены на фрагменты размером около 19 МБ каждый, и при генерации каждого токена поток асинхронного ввода-вывода считывает необходимые блоки с SSD.
Установите fio через пакетный менеджер.
`bash
sudo apt-get install fio
brew install fio
`
Измерьте пропускную способность случайного чтения с размером блока 1 МБ и прямым доступом (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
`
Интерфейсы Thunderbolt 4 или USB4 (40 Гбит/с) обеспечивают реальную пропускную способность на уровне 2800–3200 МБ/с и скорость декодирования 0.08–0.10 токен/с. Напротив, при подключении внешнего диска к порту USB 3.2 Gen2 (10 Гбит/с) с пропускной способностью 900–1050 МБ/с генерация 100 токенов занимает более 80 минут.
`
+-------------------------------------------------------------------------+
| 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 |
| +--------------------------+ +-------------------------------------+ |
+-------------------------------------------------------------------------+
`
Увеличение глубины очереди ввода-вывода (iodepth) для асинхронного упреждающего чтения (Async Expert Readahead) до значений 32–64 позволяет задействовать все параллельные каналы NVMe-контроллера и снизить задержку ожидания диска.
На системах с 32 ГБ ОЗУ одновременная загрузка резидентных весов на 9.9 GiB, кэша KV и страничного кэша файловой системы приводит к конкуренции за системную память. При стандартных настройках Linux вызов mmap для объема 370 ГБ может получить отказ в выделении виртуального адресного пространства, либо OOM Killer аварийно завершит работу движка.
Создайте файл /etc/sysctl.d/99-colibri-memory.conf и добавьте в него следующие строки:
`ini
vm.swappiness = 1
vm.overcommit_memory = 1
vm.min_free_kbytes = 2097152
vm.vfs_cache_pressure = 50
vm.max_map_count = 524288
`
Сохраните файл и примените параметры.
`bash
sudo sysctl --system
`
Снимите ограничения на блокировку памяти в сеансе оболочки, чтобы разрешить вызовы mlock() для резидентных слоев.
`bash
ulimit -l unlimited
`
| Параметр | Значение по умолчанию | Рекомендуемое значение | Цель настройки |
|---|---|---|---|
| vm.swappiness | 60 | 1 | Предотвращение вытеснения весов (9.9 GiB), закрепленных в ОЗУ, в область подкачки |
| vm.overcommit_memory | 0 | 1 | Предотвращение отказа ядра при создании mmap-отображений объемом 370 ГБ |
| vm.vfs_cache_pressure | 100 | 50 | Продление жизни файлового кэша для повторного использования весов экспертов |
| vm.max_map_count | 65530 | 524288 | Снятие лимита на отображение файлов 21 504 параметров |
| ulimit -l | 64 (KB) | unlimited | Предоставление прав на закрепление плотных (Dense) слоев в физической памяти (mlock) |
В среде macOS при исчерпании свободной памяти демон dynamic_pager начинает фоновое сжатие памяти, что создает дополнительную нагрузку на CPU. Перед запуском следует закрыть ресурсоемкие приложения, чтобы избежать активации механизма сжатия.
Декодирование в MoE моделях создает непрерывную нагрузку на кэш процессора и шину памяти. Неправильное распределение узлов NUMA на многопроцессорных рабочих станциях может вдвое снизить скорость генерации из-за узких мест межсоединений.
С помощью команды numactl --hardware определите номера физических ядер CPU, напрямую связанных с контроллером внешнего NVMe. Затем создайте скрипт оболочки, который исключает дублирование гипертрединга и закрепляет потоки строго за физическими ядрами.
`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}"
`
На MacBook с процессором Apple Silicon необходимо предотвратить передачу рабочих потоков диспетчером QoS macOS на энергоэффективные ядра (E-Core). Приложение запускается с принудительно повышенным приоритетом.
`bash
sudo nice -n -20 taskpolicy -c default ./colibri_engine --model /Volumes/SSD/glm52_i4
`
Выполнение этих четырех настроек позволит стабильно запускать 744B MoE модель локально с потоковой передачей с диска без ошибок OOM на рабочей станции или MacBook с 32 ГБ ОЗУ.