Haben Sie einen großen Ordner mit Memes, den Sie semantisch durchsuchen möchten? Haben Sie einen Linux-Server mit einer Nvidia-GPU? Du tust; Dies ist nun verpflichtend.
Man sagt, ein Bild sagt mehr als tausend Worte. Leider lassen sich viele (die meisten?) Wortgruppen nicht ausreichend durch Bilder beschreiben. Egal, hier ist ein Bild. Sie können hier eine laufende Instanz verwenden.
Dies ist ungetestet. Es könnte funktionieren. Die neue Rust-Version vereinfacht einige Schritte (sie integriert ein eigenes Miniaturbild).
python -m http.server
verwenden.pip
aus requirements.txt
(die Versionen sollten wahrscheinlich nicht genau übereinstimmen müssen, wenn Sie sie ändern müssen; ich habe einfach das eingegeben, was ich derzeit installiert habe).transformers
.thumbnailer.py
aus (in regelmäßigen Abständen, idealerweise gleichzeitig mit dem Neuladen des Index).clip_server.py
aus (als Hintergrunddienst).clip_server_config.json
.device
sollte wahrscheinlich cuda
oder cpu
sein. Das Modell läuft hier weiter.model
istmodel_name
ist der Name des Modells für Metrikzwecke.max_batch_size
steuert die maximal zulässige Batchgröße. Höhere Werte führen im Allgemeinen zu einer etwas besseren Leistung (der Engpass liegt derzeit jedoch in den meisten Fällen woanders), auf Kosten einer höheren VRAM-Nutzung.port
ist der Port, auf dem der HTTP-Server ausgeführt wird.meme-search-engine
(Rust) erstellen und ausführen (auch als Hintergrunddienst).clip_server
ist die vollständige URL für den Backend-Server.db_path
ist der Pfad für die SQLite-Datenbank mit Bildern und Einbettungsvektoren.files
ist der Ort, aus dem Meme-Dateien gelesen werden. Unterverzeichnisse werden indiziert.port
ist der Port, auf dem HTTP bereitgestellt werden soll.enable_thumbs
auf true
um komprimierte Bilder bereitzustellen.npm install
, node src/build.js
.frontend_config.json
bearbeiten.image_path
ist die Basis-URL Ihres Meme-Webservers (mit abschließendem Schrägstrich).backend_url
ist die URL, unter mse.py
verfügbar gemacht wird (abschließender Schrägstrich wahrscheinlich optional).clip_server.py
. Informationen zu MemeThresher, dem neuen automatischen Meme-Erfassungs-/Bewertungssystem (unter meme-rater
), finden Sie hier. Es dürfte etwas schwierig sein, es selbst bereitzustellen, sollte aber im Großen und Ganzen machbar sein:
crawler.py
mit Ihrer eigenen Quelle und führen Sie es aus, um einen ersten Datensatz zu sammeln.mse.py
mit einer Konfigurationsdatei wie der bereitgestellten aus, um es zu indizieren.rater_server.py
um einen ersten Datensatz von Paaren zu sammeln.train.py
um ein Modell zu trainieren. Möglicherweise müssen Sie die Hyperparameter anpassen, da ich keine Ahnung habe, welche gut sind.active_learning.py
am besten verfügbaren Prüfpunkt, um neue Paare zu bewerten.copy_into_queue.py
, um die neuen Paare in die Warteschlange rater_server.py
zu kopieren.library_processing_server.py
bereit und planen Sie die regelmäßige Ausführung meme_pipeline.py
. Die Meme-Suchmaschine verwendet einen speicherinternen FAISS-Index, um ihre Einbettungsvektoren zu speichern, weil ich faul war und sie gut funktioniert (~100 MB Gesamt-RAM für meine 8000 Memes). Wenn Sie deutlich mehr speichern möchten, müssen Sie auf einen effizienteren/kompakteren Index umsteigen (siehe hier). Da Vektorindizes ausschließlich im Speicher gespeichert werden, müssen Sie sie entweder auf der Festplatte speichern oder Indizes verwenden, die sich schnell erstellen/entfernen/hinzufügen lassen (vermutlich PCA/PQ-Indizes). Irgendwann, wenn Sie den Gesamtverkehr erhöhen, kann das CLIP-Modell auch zu einem Engpass werden, da ich auch keine Batch-Strategie habe. Die Indizierung ist derzeit GPU-gebunden, da das neue Modell bei hohen Stapelgrößen etwas langsamer erscheint und ich die Pipeline zum Laden von Bildern verbessert habe. Möglicherweise möchten Sie auch die angezeigten Memes verkleinern, um den Bandbreitenbedarf zu senken.