Модель, яка класифікує мережеве з’єднання як варте уваги чи ні, запущене на тому ж Mac, що встановило з’єднання, змінює три речі одночасно: що залишає машину, скільки коштує запуск і чи продовжує вона працювати, коли підозрюється сама мережа. Усі три важливіші для інструменту безпеки, ніж для більшості інших варіантів використання мовної моделі, тому ця стаття присвячена саме випадку на пристрої, а не виклику API.
Чому на пристрої, а саме для сортування
Надсилання рядка журналу підключень до хмарної моделі для класифікації означає передачу для кожного окремого рішення, яка програма на вашому Mac спілкується з яким хостом, через який порт прямо зараз. Нічого з цього не є таємницею, як і пароль, але це саме той тип метаданих, який намагається звести до мінімуму спільний доступ до метаданих, які піклуються про безпеку, і інструмент, ціллю якого є визначення того, що вашому Mac дозволено надсилати в інше місце, має очевидну причину не залежати від надсилання чогось в інше місце для кожного свого рішення. Локальний запуск моделі повністю усуває цю залежність: рядок журналу ніколи не залишає пристрій, оскільки на шляху прийняття рішення взагалі немає мережевого виклику.
Друга причина – безперервність. Етап сортування в хмарі доступний лише за наявності підключення до Інтернету та API постачальника, обидва вони є саме тими речами, які можуть бути погіршені або навмисно вирізані під час реального інциденту. Модель, що працює в локальній пам’яті, продовжує відповідати, коли мережа не працює, Wi-Fi вимкнено або ймовірно відбувається компрометація того самого посилання, яке використовував би виклик API.
MLX: власна структура масиву Apple
MLX — це структура масиву, створена дослідницькою командою Apple із машинного навчання спеціально для Apple silicon з API Python, C++, C і Swift. Його власна документація описує уніфіковану модель пам’яті як визначальний вибір дизайну: масиви в MLX живуть у спільній пам’яті, і операції з ними можуть виконуватися на будь-якому підтримуваному пристрої — CPU або GPU — без попереднього копіювання ваги моделі між окремими пулами пам’яті. Це особливо важливо для ноутбука: машина з дискретним графічним процесором має скопіювати вагові коефіцієнти моделі через шину в пам’ять графічного процесора, перш ніж зможе щось обчислити, що вимагає часу та подвоює обсяг пам’яті; в уніфікованій архітектурі пам’яті Mac процесор і графічний процесор уже спільно використовують ту саму фізичну пам’ять, тому копіювати нема чого.
mlx-lm, додатковий пакет для запуску мовних моделей на MLX, встановлюється за допомогою однієї команди та постачає модель за замовчуванням із коробки:
pip install mlx-lm
# runs the default model (mlx-community/Llama-3.2-3B-Instruct-4bit)
mlx_lm.generate --prompt "How tall is Mt Everest?"
# or name a specific quantized model from the mlx-community hub
mlx_lm.generate --model mlx-community/Mistral-7B-Instruct-v0.3-4bit --prompt "..."
# interactive chat session instead of a single prompt
mlx_lm.chat
# convert and quantize a model yourself
mlx_lm.convert --model mistralai/Mistral-7B-Instruct-v0.3 -qllama.cpp: портативний варіант
llama.cpp є старішим, ширше перенесеним із двох, написаним на C/C++ без виконання Python під час висновку. Його власний файл README прямо викладає позицію проекту щодо цього апаратного забезпечення: Apple silicon розглядається як, за словами проекту, «першокласний громадянин — оптимізований за допомогою фреймворків ARM NEON, Accelerate та Metal», а його документація по збірці підтверджує, що в macOS бекенд Metal GPU увімкнено за замовчуванням із прапорцем під час збирання, щоб вимкнути його, якщо ви конкретно хочете виводити лише ЦП.
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release
# Metal is on by default on macOS; add -DGGML_METAL=OFF to the first
# command above if you need to force CPU-only inference
llama cli -hf ggml-org/Qwen3.5-0.8B-GGUF
# or run it as a local server instead of a one-shot command
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUFllama.cpp працює з файлами GGUF, однофайловим форматом моделі, який об’єднує квантовані ваги та все, що потрібно для їх запуску; наведена вище команда витягує один прямо зі сховища Hugging Face за назвою. MLX, навпаки, наближається до рідного робочого процесу Python, завчасно перетворюючи та квантуючи моделі у власний формат. Ні те, ні інше не є кращим: llama.cpp — це те, до чого варто звернутися, якщо вам потрібен єдиний скомпільований двійковий файл без залежності від Python, MLX — це той, до якого варто звернутися, якщо ви вже створюєте решту свого конвеєра на Python і бажаєте отримати першокласний доступ до уніфікованої моделі пам’яті Apple звідти.
Квантування: що ви насправді обмінюєте на меншу модель
Квантування зберігає вагу кожної моделі в меншій кількості бітів, ніж 16 або 32, на яких була навчена модель, зменшуючи як файл на диску, так і пам’ять, необхідну для його запуску, за певних витрат на якість виведення. Власна документація квантування llama.cpp містить точні цифри біт на вагу для кожної підтримуваної схеми, що є більш точним способом міркувати про компроміс, ніж звичайне скорочення «4-bit» або «8-bit»:
| Схема сім'ї | Приклади схем | Біт на вагу |
|---|---|---|
| Повна точність (посилання) | F16 | 16.0 |
| Майже без втрат | Q8_0 | 8.50 |
| Вища якість середнього класу | Q5_K_S / Q5_K_M | 5,57 - 5,70 |
| Збалансована якість і розмір | Q4_K_S / Q4_K_M | 4,67 - 4,89 |
| Менший, більш втратний | Q3_K_S / Q3_K_M / Q3_K_L | 3.64 - 4.30 |
| Екстремальне стиснення | IQ2_XXS ... IQ2_M | 2,00 - 2,93 |
Множення кількості параметрів моделі на її біт на вагу дає приблизну оцінку пам’яті лише для ваг: моделі з 7 мільярдами параметрів із 4,89 біта на вагу Q4_K_M потрібно приблизно 7 000 000 000 × 4,89 ÷ 8 байтів, або приблизно 4,3 ГБ, перш ніж враховувати контекстне вікно та проміжні активації, які додають більше зверху, залежно від того, скільки тексту ви подаєте. Це розрахунок на основі наведеної цифри біт на вагу, а не числа, яке публікує напряму будь-який проект, і фактичне використання пам’яті буде більшим, коли буде завантажено реальне підказка та його контекст. Практичні рекомендації, які випливають із таблиці, прості: для такого завдання, як класифікація одного рядка журналу з’єднань за раз, де вхідні дані короткі, а необхідний вихід є невеликим структурованим вердиктом, модель класу Q4_K_M дуже часто є правильною пропозицією — помітно менша та швидша, ніж Q8_0 або F16, без падіння до рівня екстремального стиснення, де якість виведення погіршується різкіше.
Жоден проект не публікує вимоги до пам’яті для конфігурації Mac, тому практичний підхід полягає в тому, щоб відійти від наведеної вище оцінки та залишити реальний запас: сама macOS, ваш браузер і все, що запущено, також потребують уніфікованої пам’яті, і модель, яка ледве підходить, якщо нічого не відкрито, зміниться або зупиниться, коли ви перейдете на іншу програму. На комп’ютерах Mac із скромним об’ємом уніфікованої пам’яті це є аргументом для того, щоб залишатися в меншій частині таблиці вище — кілька мільярдів параметрів у Q4_K_M, а не набагато більша модель із тим самим квантуванням — і зберігати більші опції з вищою точністю для машин із запасною пам’яттю. Для вузької класифікаційної задачі, подібної до тієї, про яку йдеться в цій статті, менша модель, якій задано точне запитання, має тенденцію бути швидшою та, на практиці, послідовнішою, ніж більша модель із невизначеним.
Обидва проекти знаходяться в стадії активної розробки, і чесне порівняння полягає не в тому, «який краще», ніж «який підходить вашому трубопроводу». llama.cpp компілюється в один двійковий файл, не потребуючи часу виконання Python під час висновку, що має значення, якщо ви хочете вставити його в інший фрагмент програмного забезпечення без доставки інтерпретатора Python разом із ним. MLX припускає, що ви вже працюєте на Python (або Swift, для якого він також постачає прив’язки) і винагороджує це тіснішою інтеграцією у власний стек машинного навчання Apple і описану вище модель уніфікованої пам’яті. Інструмент безпеки, створений як окрема програма для macOS, у якій знаходиться сам FireAI, знаходиться ближче до кінця цього спектру llama.cpp; блокнот для дослідження, який зразок підказок працює найкраще, знаходиться ближче до кінця MLX.
Шаблон підказки для перевірки одного підключення
Чим вужче питання, яке ви задаєте невеликій локальній моделі, тим надійніше вона відповідає. Для окремого зв’язку це означає надати йому саме ті поля, на які дивився б рецензент — нічого більше, нічого не виведеного — і вимагати структурованого вердикту, а не прози у вільній формі:
System: You review one outbound network connection at a time. You are
given only the fields listed below. Do not assume anything not stated.
Respond with exactly two lines: a verdict (allow, ask, or block) and a
one-sentence reason a non-expert could understand.
Connection:
app: UpdaterHelper.app
code_signature: unsigned
destination: 91.203.xxx.xxx:4444
protocol: TCP
threat_feed_hit: none
first_seen: yes (no prior rule for this app)
Verdict:Поля, які мають значення, — це ті, які перевірка підпису коду та канал загроз може створити без здогадок: чи підписаний двійковий файл і ким, куди він намагається підключитися та на якому порту, чи це призначення відображається у каналі загроз і чи ця програма взагалі вперше намагається підключитися. Запит на фіксований вихід у два рядки, а не відкрите пояснення, полегшує реєстрацію результату, легше порівнює його між тисячами з’єднань, і набагато важче для моделі доповнювати мову хеджування, яка звучить авторитетно, не кажучи нічого перевіреного.
Маленька модель все одно час від часу ігноруватиме запитуваний формат — три рядки замість двох, додаткове застереження, слово вердикту, яке не є одним із трьох, які ви просили. Поставтеся до цього як до інженерної проблеми, а не до проблеми моделювання: перевірте результат на відповідність точної форми, яку ви очікуєте, і якщо він не збігається, перепитайте або поверніться до найбезпечнішого вердикту (запитайте, тобто покажіть людину), а не намагайтеся проаналізувати більш вільну відповідь. Етап сортування, який безпечно зазнає помилки на неправильно сформованому виході, є набагато кориснішим, ніж той, який час від часу створює впевнений вигляд, але нерозбірливий рядок і мовчки його видаляє.
Запустіть цей шаблон протягом цілого дня спроб з’єднання, а не по одній, і форма робочого навантаження зміниться: більшість з’єднань здійснюються з додатків із існуючим правилом і ніколи не досягають моделі взагалі, меншу кількість справді бачать першими та отримують вердикт, і лише частина цих вердиктів є чимось іншим, ніж дозволено процедурою. На даний момент справжня робота моделі полягає не в тому, щоб бути експертом з безпеки; це скоротити довгий список перших побачених зв’язків до невеликої підмножини, яку людині насправді потрібно подивитися, що є набагато більш досяжною ціллю для моделі з кількома мільярдами параметрів, ніж відкрите судження про безпеку.
Де це йде не так
- Маленька місцева модель може породити впевнену, добре написану, абсолютно неправильну причину. Локальний запуск нічого не змінює цей ризик; змінюється лише місце помилки, а не те, чи може вона статися.
- Контекстні вікна обмежені, і довгий шумний журнал не поміщається. Узагальнення або попереднє фільтрування до того, як модель побачить дані, створює власну точку збою — ви можете втратити єдиний важливий рядок до того, як модель матиме можливість переглянути його.
- Модель завжди бачить лише те, що містить рядок журналу. Він не може бачити внутрішній зашифрований трафік, не може перевірити поточний канал загроз і не може знати ваші наміри — з’єднання від інструменту, який ви щойно навмисно встановили, виглядає ідентично з’єднанню від інструменту, про який ви ніколи не чули.
- Вирок – це не дія. Ніщо тут не повинно самостійно блокувати, видаляти або мовчки дозволяти з’єднання; людині все одно потрібно побачити причину та підтвердити її, а також мати можливість скасувати виклик, якщо модель помилилася.
Цей останній пункт не є обмеженням, характерним для маленької квантованої моделі, що працює на ноутбуці — це стосується кожного автоматизованого рішення безпеки, локального чи хмарного, малої чи великої моделі. Цінність його локального запуску полягає в тому, що він усуває з рівняння (залежність від мережі, регулярний рахунок, третя сторона отримує метадані вашого з’єднання), а не твердження, що це усуває потребу в людині в циклі.
Де FireAI відповідає цій моделі
FireAI, брандмауер HisnLabs для Mac, постачає щось, побудоване на тій самій ідеї, у вужчому масштабі, ніж модель чату загального призначення: додаткова локальна модель, додаткове завантаження приблизно 1,5 ГБ, яка повністю працює на Mac і перевіряє з’єднання з програм, які ще не мають правил. Він вимагає macOS 14 або пізнішої версії на Apple Silicon, застосовує загальнодоступні канали загроз локально, а не перевіряє їх на віддалену службу, і показує причину свого рішення в тому самому запиті дозволу, який він використовує, щоб запитати вас дозволити чи заборонити з’єднання — кожне з цих рішень стає видимим правилом, яке можна редагувати, і будь-яке з них можна скасувати. Варто бути точним щодо того, що це таке, а що ні: це не відкрита модель чату з кількома мільярдами параметрів, яку описувала ця стаття, і це не антивірус чи VPN — він виконує одну вузьку класифікаційну роботу, локально, і залишає останній виклик тому, хто читає підказку.
Яке місце тут посідають FireAI та HisnLabs
FireAI’s own connection reviewer is this exact bet, made narrower still: an optional, roughly 1.5 GB on-device model, macOS 14 and up, Apple silicon only, reviewing one thing (should this unknown app reach this destination) with a visible reason and an undo button — and, like the triage pattern in this article, it still needs a person to confirm anything consequential.
FireAI — це власний продукт HisnLabs: ШІ-фаєрвол, який працює безпосередньо на вашому Mac. Він показує простою мовою кожне з’єднання, яке встановлюють ваші застосунки, і дає вам вирішувати, що покидає ваш Mac, — його ШІ працює локально, тож ваш трафік ніколи не надсилається ні нам, ні будь-кому іншому. Команда дослідників безпеки HisnLabs — саме вона підтримує точність цих рішень: каталогізує, які домени є звичайною телеметрією, а які — справжнім сервісом, відстежує країну та мережу за з’єднанням і навчає локальну модель (функцію Autopilot) на реальних шаблонах трафіку — і нічого з цього не покидає ваш Mac.
Ви можете почитати про технічні рішення, що лежать в його основі, або спробувати FireAI протягом 17 днів на сторінці FireAI від HisnLabs.