TuBrief
구독 채널
비디오
커뮤니티

Настройка для бесперебойной работы 744B MoE моделей на MacBook и рабочих станциях с 32 ГБ ОЗУ

TuBrief 편집팀
2026년 8월 24일
0
Computing/Software

원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.

Русский한국어English中文العربيةहिन्दीFrançaisPortuguêsEspañolBahasa Indonesia日本語Deutsch

관련 영상

Этот крошечный инструмент запускает ИИ-модель на 744 млрд параметров на обычном железе (colibrì)11:35

Этот крошечный инструмент запускает ИИ-модель на 744 млрд параметров на обычном железе (colibrì)

Better Stack

커뮤니티의 다른 글

사내 시스템에 llm api 붙일 때 마주하는 현실적인 한계와 대응법

2026년 9월 13일

레거시 백엔드에 GPT-6 Astra 붙일 때 예산 승인과 보안 통과를 먼저 끝내는 법이 있습니다

2026년 9월 13일

에이전트끼리 대화하다 6천만 원 청구서가 나오는 이유

2026년 9월 13일

사내 RAG 벡터 검색에 Okta 권한 필터를 직접 거는 방법

2026년 9월 13일

브라우저 에이전트에게 내 구글 계정을 통째로 넘기면 안 되는 이유

2026년 9월 12일

Apple Won the AI Race

2026년 9월 12일

댓글 (0)

Log in to leave a comment

아직 작성된 글이 없습니다

© 2026 . All rights reserved.

TuBrief
구독 채널
비디오
커뮤니티
로그인

Настройка для бесперебойной работы 744B MoE моделей на MacBook и рабочих станциях с 32 ГБ ОЗУ

При локальном запуске 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

Бенчмарк внешнего SSD и расширение очереди асинхронного ввода-вывода

Задержка декодирования в colibrì определяется скоростью случайного чтения диска блоками по 1 МБ. Файлы весов маршрутизируемых экспертов GLM-5.2 разделены на фрагменты размером около 19 МБ каждый, и при генерации каждого токена поток асинхронного ввода-вывода считывает необходимые блоки с SSD.

Измерение пропускной способности чтения с помощью fio

Установите fio через пакетный менеджер.

`bash

Linux

sudo apt-get install fio

macOS

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-контроллера и снизить задержку ожидания диска.


Настройка виртуальной памяти ядра и предотвращение OOM

На системах с 32 ГБ ОЗУ одновременная загрузка резидентных весов на 9.9 GiB, кэша KV и страничного кэша файловой системы приводит к конкуренции за системную память. При стандартных настройках Linux вызов mmap для объема 370 ГБ может получить отказ в выделении виртуального адресного пространства, либо OOM Killer аварийно завершит работу движка.

Применение параметров ядра Linux

Создайте файл /etc/sysctl.d/99-colibri-memory.conf и добавьте в него следующие строки:

`ini

Предотвращение выгрузки резидентной памяти в область подкачки

vm.swappiness = 1

Разрешение оверкомита виртуальной памяти

vm.overcommit_memory = 1

Резервирование пространства аварийного буфера памяти (2 ГБ)

vm.min_free_kbytes = 2097152

Повышение коэффициента сохранения файлового кэша диска

vm.vfs_cache_pressure = 50

Расширение лимита количества mmap-отображений

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. Перед запуском следует закрыть ресурсоемкие приложения, чтобы избежать активации механизма сжатия.


Привязка ядер CPU и создание скрипта запуска

Декодирование в MoE моделях создает непрерывную нагрузку на кэш процессора и шину памяти. Неправильное распределение узлов NUMA на многопроцессорных рабочих станциях может вдвое снизить скорость генерации из-за узких мест межсоединений.

Создание комплексного скрипта запуска

С помощью команды numactl --hardware определите номера физических ядер CPU, напрямую связанных с контроллером внешнего NVMe. Затем создайте скрипт оболочки, который исключает дублирование гипертрединга и закрепляет потоки строго за физическими ядрами.

`bash
#!/usr/bin/env bash
set -euo pipefail

1. Настройка виртуальной памяти ядра

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. Снятие ограничений на блокировку памяти

ulimit -l unlimited

3. Привязка потоков OpenMP к физическим ядрам

export OMP_NUM_THREADS=16
export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores

4. Запуск с привязкой к 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}"

`

На 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 ГБ ОЗУ.