Nous comparons USearch, FAISS-CPU et sqlite-vec en charge CPU sur M4 lorsque l’embedding tourne déjà en local ou derrière une passerelle. Croisez la matrice quotas RAG local, Haystack sur Mac distant et retour freelance Mac mini avant d’externaliser l’index. Texte opérationnel : lots, fils et chemins prêts pour runbook.
Ruptures fréquentes
- Falaises RAM : construction HNSW > RAM d’interrogation jusqu’à compaction ; le Moniteur d’activité lisse la courbe et masque les pics.
- Chemins toxiques : Téléchargements ou dossier sync → graphes corrompus quand le client nuagique bride l’écriture aléatoire.
- Loyer : micro-lots et trop de fils allongent l’ingestion au-delà d’un Mac loué dédié.
Matrice de décision
| Axe | USearch | FAISS-CPU | sqlite-vec |
|---|---|---|---|
| Cas d’usage | API compactes, graphes HNSW | Variété d’index et baselines labo | SQL, suppressions, fichier unique |
| Lot d’ingestion | 4096–16384 vecteurs dim 768 fp32 | Entraînement IVF puis adds 8192–32768 | 500–2000 lignes par transaction WAL sur SSD |
| Fils de construction | cœurs perf moins un (~9 sur M4 Pro) | idem via omp_set_num_threads | un writer séquentiel pour bulk load |
| Mémoire | pic ~2–3× octets bruts des vecteurs | IVFPQ réduit RAM au prix du rappel | amical cache page SQLite |
| Disque conseillé | ~/Library/Caches/LlmMac/vec/usearch/<corpus> | ~/Library/Caches/LlmMac/vec/faiss/<corpus> + json | ~/Library/Caches/LlmMac/vec/sqlite/<tenant>.sqlite |
Valeurs d’environnement immédiatement exécutables
Collez dans launchd, tmux ou CI pour aligner portable et hôte loué ; affinez le lot après mesure du débit d’embeddings.
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 interne pour embeddings et index ; APFS externe OK si Spotlight est coupé sur le volume. Journalisez le volume dans le ticket pour éviter tout mélange au rejouage.
Cinq étapes de déploiement mesurable
Étape une : mille requêtes et voisins brute-force en dim et dtype prod ; tout rappel se lit sur cette tranche figée.
Étape deux : même normalisation et métrique ; manifeste haché par index pour audit.
Étape trois : balayez 4k–32k vecteurs à fils fixes ; stoppez avant pression mémoire jaune durable.
Étape quatre : préchauffage cinq minutes ; log p50, p95 et rappel vs brute pour un régime réaliste.
Étape cinq : tarball index + manifeste + JSON bench avec checksums ; rejouez sur Mac loué avant budget récurrent.
Checklist d’acceptation pour nœud distant
| Portail | Critère de passage |
|---|---|
| Réalisme du coût | 12–24 h de trempage sans redémarrage ; loyer × mur d’horloge bat DIY courant + ingénieur |
| Parité de latence | p95 à moins de dix pour cent du portable au même top-k et mêmes efSearch ou probes |
| Rappel | rappel à moins de deux points de la brute sur holdout |
| Thermique | pas de chute de fréquence soutenue sous rejouage ingestion plus requête |
| Audit | logs : version corpus, params, env, empreinte tarball |
Repères opposables
- Lots 8k–16k : souvent le plafond bande passante fp32 dim 768 sur M4 avant la RAM.
- Neuf fils : cœurs perf −1 sur M4 Pro type, marge pour workers d’embedding.
- 24 h de trempage : fuites, launchd, thermique — invisible en démo courte.
FAQ courte
sqlite-vec ? Fichier par locataire, suppressions simples, débit secondaire.
USearch vs FAISS ? USearch HNSW CPU léger ; FAISS si IVFADC ou baselines labo.
Rappel post-migration ? efSearch, probes, float16 vs float32 sur les deux hôtes.
Parcours sans connexion : pages tarifs, achat et blog technique restent consultables sans authentification.
Résumé : choisissez le moteur selon l’exploitabilité ; figez lots, fils et chemins ; exécutez la checklist sur Mac loué avant de parier le budget production sur la recherche vectorielle.