1/ JSTprove V2 jest tutaj. To jest duża aktualizacja naszego stosu zkML z szybszymi obwodami, większą liczbą obsługiwanych warstw, szerszą kompatybilnością modeli i znacznie lepszym doświadczeniem dla deweloperów. To duży krok w kierunku praktycznego, weryfikowalnego ML.
2/ Wysłaliśmy dwie główne optymalizacje obwodów. Zastąpiliśmy kosztowne kontrole zakresu tabelami wyszukiwania i dodaliśmy algorytm Freivaldsa do szybkiej probabilistycznej weryfikacji macierzy. Oba znacząco redukują ograniczenia i koszty dowodzenia.
3/ Dlaczego to ma znaczenie: Sprawdzanie zakresów pojawia się wszędzie w obwodach ML (ReLU, skalowanie, max/min, itp.) i jest bardzo kosztowne. Zastąpienie ich tabelami wyszukiwania oszczędza ograniczenia w prawie każdym modelu i przynosi natychmiastowe zyski wydajności.
4/ Dla dużych operacji na macierzach, teraz używamy algorytmu Freivaldsa. Zamiast weryfikacji w czasie sześciennym, stosujemy probabilistyczne kontrole w czasie kwadratowym tam, gdzie to możliwe, co dramatycznie obniża koszty weryfikacji dużych GEMM-ów i podobnych operacji.
5/ Rozszerzyliśmy również wsparcie dla warstw ONNX. JSTprove teraz obsługuje Add, Sub, Mul, Max, Min, Clip, 4D MaxPool (na razie) oraz BatchNorm, odblokowując znacznie szerszą klasę modeli rzeczywistych.
6/ JSTprove nie zakłada już pojedynczego wejścia i wyjścia. Teraz wspieramy grafy ONNX z wieloma wejściami i wyjściami. Wymagało to głębokich refaktoryzacji w części środkowej i backendzie Rust, ale znacznie zwiększa kompatybilność modeli.
7/ Przebudowaliśmy również framework testowy. Możesz teraz testować poszczególne warstwy, przeprowadzać pełne testy pipeline (kwantyzacja → obwód → świadek → dowód → weryfikacja), testować kształty i parametry oraz uzyskiwać odpowiednie, pomocne błędy dla nieobsługiwanych modeli.
8/ Dodanie warstw takich jak BatchNorm zmusiło nas do uporządkowania i zmodularyzowania dużych części backendu. To sprawia, że przyszłe dodatki warstw i optymalizacje są znacznie szybsze, bezpieczniejsze i łatwiejsze do zrozumienia.
9/ Wynik: JSTprove V2 jest szybszy, tańszy w udowadnianiu, bardziej ekspresyjny, bardziej odporny i gotowy na znacznie bardziej złożone modele rzeczywiste. To duży krok w kierunku uczynienia weryfikowalnego uczenia maszynowego praktycznym w produkcji.
130