Edge Intelligence veri boru hattı oluşturma: Millisekundaki Yapısal Varlıklara Metin. Tasarımı yaparken Mimarlıkta, karşılaştığım ilk kısıtlamalardan biri "Inference Vergisi"ydi - bu, asla optimum olarak tasarlanmadıkları görevleri yerine getirmek için büyük, monolitik Büyük Dil Modellerine (LLM'lere) güvenmenin hesaplama üstünde. FogAI Naif bir mimaride, bir geliştiriciler ham sensör günlükleri veya sohbet bağlamını 7B veya 8B parametreler modeline yönlendirebilirler. "Extract all the field units, locations, and timestamps from the following text." Edge AI için bu yaklaşımla ilgili iki önemli sorun var: Inference Vergisi: 8B parametreleri ile basit bir çıkarma yapmak pil yakar, VRAM'i doldurur ve sadece bir JSON satırını döndürmek için gecikme (300ms+ per query) sunar. Halüsinasyonlar: LLM'ler generatiftir. Sonrasında hangi token geldiğini tahmin ederler, bu da yapısal uyumsuzluklara ve fabrikalı varlıklara yol açar. Bu sorunu çözmek için, özel bir kullanarak model (194M parametreleri). tamamen çalıştırılır , bu katman, ham metin akışları ve yapılandırılmış hareket edilebilir veriler arasındaki boşluğu kapatır - hepsi tek bir Python wrapper olmadan. Knowledge Extraction Layer knowledgator/gliner-bi-base-v2.0 MNN İşte “sihirli” hızın nasıl çıkarıldığının mimari çöküşü. Bi-Encoder İncelemesi Klasik NER modelleri, entiteleri önceden tanımlamanızı gerektirir (örneğin, ve ve ) eğitim sırasında. şu anda bir özelleştirilmiş entiteye ihtiyacınız veya Bu model kırılıyor. PERSON ORG LOC WELDING DEFECT RADIO FREQUENCY GLiNER (Generalist and Lightweight Named Entity Recognition) bunu bir Fiziksel olarak kodlama sürecini ortalamaya ayırır: Bi-Encoder Architecture Text Encoder: Gelen metin için zengin bağlam içine yerleştirmeler oluşturur. Etiket Kodlayıcısı: Bulmak istediğiniz varlıkların listesi için eklentiler oluşturur. Neden bu mimari bölünme Edge için bir masterstroke? Caching. İş yerindeki verileri izleyen bir kenar düğmesinde, istenen etiketler (örneğin, ) nadiren millisecond'dan millisecond'a değişir. çünkü metin ve etiket kodlayıcıları ayrılmıştır, . ['worker', 'forklift', 'safety_vest', 'pallet'] FogAi caches the Label Embeddings in RAM Gelen her yeni metin akışı için, Gateway'in sadece Metin Kodlayıcısını çalıştırması gerekir. , 5 varlık türü veya 500 aradığınız olursa olsun. Constant-Time Inference Tam veri akışı: Zero Python FogAi, MNN inferansını doğrudan gerçekleştirmek için JNI ve gRPC'yi kullanır. Raw Text Ingest -> Bir raw string Vert.x Gateway'de gelir. JNI / C++ Hand-off -> String doğrudan off-heap bellek tamponları aracılığıyla iletilir. MNN Text Encoder -> Gliner-bi-base-v2.0 ONNX grafiği MNN çalıştırma süresini kullanarak yürütülür (Edge CPU ve NPU'lar için tamamen hızlandırılır). Vector Dot Product -> C++ motoru yeni Text Embeddings ve önceden hesaplanmış Label Embeddings arasında basit bir Dot Product benzerlik matrisini hesaplar. Yapısal Çıkış -> Etiketli aralıkları içeren temiz bir JSON payload < 50 milisekundaki sürede yönlendirilir. Tüm bunlar, verilerin bulutta hiçbir zaman dokunmadan gerçekleşir. İnferans Vergisi Benchmarking İnferans Vergisi Benchmarking: Yüzükte Üç Model Ben sadece “inference vergisi” teorisi değildim – bunu ölçtük. Dosyaları of the Python benchmarking scriptlerini oluşturdum Standart bir cümle. pycompare FogAi ['animal', 'location', 'time', 'date'] Ringe giren üç yarışmacıya bir bakalım: Ağır Ağırlık (Genel LLM): Qwen2.5-0.5B-Öneriler Özel Ağır Ağırlık: numind/NuExtract-1.5 (bir ince ayarlı ekstraksiyon LLM) Agile Bi-Encoder (FogAi'nin Motorları): GLiNER-194M İşte genel empirik veriler: MHP Genel Başkanlığı ( ) pycompare/test_llm_perf.py Model Numarası: Qwen2.5-0.5B-Instruct Etiket Arşivleri: Generative Causal LM Giriş Hızlı Token: 53 Üretilen tokenler: 100 Toplam Inference Zamanı: 3,524.42 ms (Evet, 3.5 saniye) RAM ayak izi: 1,116.77 MB Sonuç: LLM halüsinasyon yaptı, "kırmızı köpek" ve "çirkin köpek"yi tamamen kaçırmış bir JSON blokunu ortaya çıkardı, ardından entiteleri nasıl çıkarmayı planladığına dair istenmeyen bir iç monologun 50 tokeninin ardından. 2. Uzmanlık LLM (NuExtract 1.5) Model Numind / NuExtract-1.5 Generative Causal LM (Fine-tuned for JSON Extraction - JSON Kaynağı Kaynağı) Giriş Hızlı Token: 55 Üretilen çıkış tokenleri: 30 Toplam İnferans Zamanı: ~1,200.00 ms RAM ayak izi: ~1,200.00 MB Sonuç: Doğru JSON biçiminde varlıkların hassas bir şekilde çıkarılması, ancak hala otoregresif token üretimi aşırı derecede acı çeker. Qwen'den daha hızlıdır, çünkü daha az halüsinasyon yapar, daha az çıkış token oluşturur, ancak hala bir saniye sürer. Bilişim Teknolojileri ( ) pycompare/test_gliner_perf.py Model Numarası: knowledgator/gliner-bi-base-v2.0 Etiket Arşivleri: bi-encoder Yaklaşık Giriş Tokenleri: 22 (Text + Etiket) Toplam İnferans Zamanı (Python): 50.83 ms Toplam İnferans Zamanı (JNI/C++ Web Gateway): ~750.00 ms (HTTP çerçeve, sıralama ve off-heap memcopy dahil) RAM ayak izi: 824.11 MB Sonuç: Temiz, mükemmel bir şekilde yapılandırılmış {animal: "hızlı kahverengi boğa", konum: "New York", zaman: "5 PM", tarih: "Pazartesi"} The Verdict: Embeddings vektor veritabanlarının kanıdır GLiNER'e Bilgi Ekstraksiyonu'nu yüklenerek, FogAi boru hattını en fazla Genel bir LLM ile karşılaştırıldığında (3500ms vs. 50ms toptan yürütme) ve tamamen otoregresif şişme sınırını aşarak ince ayarlı ekstraksiyon LLM'lerini (NuExtract gibi) öne çıkarır. 6,800% Ama kaba idam sadece savaşın yarısıdır. How do we deploy it? Gateway entegrasyon testi: Her topolojiyi test etmek (nodlar A, B ve C) FogAi mimarisinde, GLiNER'in entegrasyonunu test etmek için üç farklı dağıtım topolojisi inşa ettim. Tip A (In-Process JNI): Vert.x API Gateway ile aynı JVM içinde doğrudan bellek erişimi (off-heap bellek tamponları) aracılığıyla C++'da GLiNER'i açıkça çalıştırır. Type B (Out-of-Process C++ gRPC): GLiNER'i bağımsız bir C++ microservice'da (MNN veya ONNX sürümünü kullanarak) çalıştırır ve HTTP/2 üzerinden Gateway ile iletişim kurar. Type C (Out-of-Process Python gRPC): ONNX çalıştırma süresini kullanarak standart Python tabanlı bir gRPC mikro servisinde GLiNER'i çalıştırır. Vert.x API Gateway aracılığıyla tüm üç düğmeyi yüklediğimde sonuçlar kesin: Averaged per request under load. The combined overhead of Protobuf serialization, inter-process HTTP/2 networking, and the crushing weight of the Python Global Interpreter Lock (GIL) created a massive bottleneck. Type C (Out-of-Process Python gRPC): 3,200 ms - 4,500 ms Averaged per request under load. Even with a hyper-optimized C++ backend, the overhead of Protobuf serialization/deserialization and inter-process HTTP/2 networking created a massive bottleneck. Under stress tests ( ), the network stack overhead resulted in queue pileups for a model that normally takes 50ms to run natively. Type B (Out-of-Process C++ gRPC): 1,250 ms - 2,100 ms test_integration.sh Sustained end-to-end latency the HTTP Web Gateway routing, EDF queueing, Type A (In-Process JNI): ~750.00 ms including the "Vanilla" safety checks, and memory mapping. The direct off-heap C++ memory handoff bypassed the networking and serialization layer entirely. MNN içindeki bir kenar Tipi A düğmesinde GLiNER'i natif olarak işleyerek, otomatik olarak ve Gelişen geçiş sırasında bu varlıkların yoğun bağlamda yerleştirmelerine erişim elde edin. Generative LLM'ler, ikincil yerleştirme modelleri olmadan veritabanı endeksleme için natif olarak token yerleştirmelerini çıkartmaz. veri bulut kümesine gönderilmeden önce doğrudan JNI üzerinden bunu yapmak bana bir avantaj sağlar. : Hızlıca Temporal Knowledge Graphs'i sahadaki ham sensör beslemelerinden oluşturabilirim. Ücretsiz Ücretsiz unfair advantage Bir kenar düğmesine yerleşik Bilgi Ekstraksiyonu için LLM'lere güvenmek donanım kötüye kullanımıdır. GLiNER'i C++ MNN'ye İhracat Python olmadan bu JNI entegrasyon hızı elde etmek için, HuggingFace GLiNER modeli MNN'nin Daha yeni PyTorch sürümlerinde ONNX dinamik şekil izleme hatalarını HuggingFace'den doğrudan açık ONNX izleme katmanını alarak ve . .mnn MNNConvert Ben bu tam dönüşüm senaryosunu sağladım Repository içinde : scripts/convert_gliner_to_mnn.sh #!/bin/bash ONNX_MODEL="models_onnx/gliner-bi-v2/onnx/model.onnx" MNN_DIR="models_mnn/gliner-bi-v2" mnnconvert -f ONNX --modelFile "$ONNX_MODEL" --MNNModel "$MNN_DIR/model.mnn" --bizCode MNN copy models_onnx/gliner-bi-v2/*.json "$MNN_DIR/" Sihirbazınızı kendiniz kontrol edin Kendi makinenizde Python referanslarını çalıştırabilirsiniz. FogAi depolamasını klonlayın, navigasyona gidin , ve canlı Inference Vergi görmek için testleri gerçekleştirin: pycompare git clone https://github.com/NickZt/FogAi.git cd FogAi python3 -m venv venv && source venv/bin/activate pip install psutil gliner transformers accelerate python3 pycompare/test_gliner_perf.py python3 pycompare/test_llm_perf.py Bonus: FogAi'yi Open WebUI'ye bağlayın Nitekim Nâzım’ın ortaya koyduğu bir (Bölüm ), onunla etkileşim kurmak için özel bir müşteri kodu yazmanıza bile gerek yok. Popüler sohbet arayüzlerini doğrudan Gateway'e yönlendiren depoda kurulumu. OpenAI-compatible API /v1/chat/completions docker-compose Docker'ı bilgisayarınıza yüklediğinizden emin olun. UI dizinine gidin ve hizmetleri başlatın: cd UI docker-compose up -d Open your browser and start chatting: : Open WebUI http://localhost:3000 : (Password is simply ) Lobe Chat http://localhost:3210 fogai Bağlantılar otomatik olarak ulaşılabilir , çalışan MNN ve ONNX modellerini keşfedin ve bulutta çalıştıkları gibi onları çağırın. http://host.docker.internal:8080/v1