ANN на Apple Silicon — это дисциплина ingest: размер батча, лимит потоков, путь на внутреннем SSD и unified memory ещё до первого запроса в проде.

USearch, FAISS-CPU и sqlite-vec на M4 для CPU-retrieval, если эмбеддинги уже локально или за шлюзом. Контекст: чанки, батчи и квоты RAG, Haystack 2.x на удалённом Mac, опыт аренды Mac mini. Дальше — матрица и чек-лист для runbook.

Риски: пик RAM при сборке графа; индекс не в «облачных» каталогах; мелкий батч + лишние потоки удлиняют аренду сверх выгоды.

Матрица сравнения

Измерение USearch FAISS-CPU sqlite-vec
Лучше всего Компактный API, HNSW-класс на CPU Разнообразие индексов и лабораторные базовые линии SQL-удаления, один файл на тенанта
Батч импорта 4096–16384 векторов, dim 768 fp32 обучение IVF, затем добавления 8192–32768 500–2000 строк на транзакцию, WAL, внутренний SSD
Потоки сборки число P-ядер минус один (~9 на M4 Pro) то же; faiss.omp_set_num_threads один писатель при массовой загрузке
Память пик сборки ~2–3× сырых байт векторов IVFPQ экономит RAM, recall дороже калибровки дружелюбно к page cache, оверхед SQLite
Каталоги на диске ~/Library/Caches/LlmMac/vec/usearch/<corpus> ~/Library/Caches/LlmMac/vec/faiss/<corpus> + json манифеста ~/Library/Caches/LlmMac/vec/sqlite/<tenant>.sqlite

Переменные окружения

Одинаковые значения на ноутбуке и аренде; VEC_INGEST_BATCH подгоняйте под эмбеддер.

export VEC_INDEX_ROOT="${HOME}/Library/Caches/LlmMac/vec"
export VEC_CACHE_ROOT="${HOME}/Library/Caches/LlmMac/vec/tmp"
export VEC_INGEST_BATCH=8192
export VEC_BUILD_THREADS=9
export VEC_QUERY_THREADS=4
mkdir -p "${VEC_INDEX_ROOT}/usearch" "${VEC_INDEX_ROOT}/faiss" "${VEC_INDEX_ROOT}/sqlite" "${VEC_CACHE_ROOT}"

SSD внутри корпуса; внешний APFS — без Spotlight на томе; серийник тома в тикете для replay.

Короткий rollout

  • Holdout + brute на тех же dim/dtype.
  • Одинаковая метрика/нормализация; хеш корпуса в манифесте.
  • Sweep батча до жёлтого memory pressure; прогрев 5 мин; p50/p95 и recall.
  • Tarball + env + checksum — тот же прогон на аренде.

Чек-лист приёмки удалённого узла (стоимость и качество)

Ворота Критерий прохождения
Экономика soak 24 ч без рестартов; ставка_аренды × wall time дешевле «своего» железа + инженерного времени
Задержка p95 не хуже +10% к ноутбуку при том же top-k, efSearch или числе probes
Recall среднее по holdout в пределах ±2 п.п. к brute
Термика нет устойчивого просадочного такта при ingest+query replay
Аудит логи: версия корпуса, параметры, снимок env, SHA tarball

FAQ: sqlite-vec — удаления и файл на тенанта; USearch — HNSW-сервис на CPU; FAISS — IVF/PQ и baselines. Просадка recall на аренде: dtype, efSearch/probes, прогрев.

Без входа в аккаунт: тарифы, покупка, технический блог.

Итог: выбор движка — про эксплуатацию; закрепите батч, потоки и пути; прогоните чек-лист на аренде до прод-ретривала.