Obliczenia naukowe sowy

Obliczenia naukowe sowy
Oryginalni autorzy Liang Wang
Deweloperzy Projekt społeczności
Pierwsze wydanie 2016 ( 2016 )
Wersja stabilna
1.0.2 / 14 lutego 2022 ; 12 miesięcy temu ( 2022-02-14 )
Napisane w OCaml , C
System operacyjny Międzyplatformowe
Typ Analiza numeryczna
Licencja MIT

Owl Scientific Computing to system oprogramowania do obliczeń naukowych i inżynierskich opracowany na Wydziale Informatyki i Technologii Uniwersytetu Cambridge . Działająca na Wydziale Grupa Badań Systemowych (SRG) uznaje Owl za jeden z reprezentatywnych systemów opracowanych w SRG w latach 2010-tych. Kod źródłowy jest objęty licencją MIT License i można uzyskać do niego dostęp z repozytorium GitHub.

Biblioteka jest w większości zaprojektowana i rozwijana w funkcjonalnym języku programowania OCaml . Jako unikalny funkcjonalny język programowania, OCaml oferuje wydajność środowiska uruchomieniowego, elastyczny system modułów, statyczne sprawdzanie typów, inteligentny moduł zbierania elementów bezużytecznych i potężne wnioskowanie o typach . Owl dziedziczy te funkcje bezpośrednio z OCaml. Dzięki Owl użytkownicy mogą pisać zwięzłe, bezpieczne dla typów aplikacje numeryczne w zwięzłym, funkcjonalnym języku bez poświęcania wydajności. Przyspiesza cykl rozwojowy i zmniejsza koszty od prototypu do wykorzystania produkcyjnego. System służy de facto jako narzędzie do intensywnych obliczeniowo zadań w OCaml.

Historia

Sowa została opracowana, gdy dr Liang Wang pracował jako Post-Doc w OCaml Labs. Owl wywodzi się z projektu badawczego, który badał projektowanie synchronicznych maszyn równoległych do obliczeń rozproszonych na dużą skalę w lipcu 2016 r. Wtedy biblioteki do obliczeń numerycznych w ekosystemie OCaml były bardzo ograniczone, a narzędzia były wówczas fragmentaryczne. Aby przetestować różne aplikacje analityczne, trzeba było zaimplementować wiele funkcji numerycznych, od algebry bardzo niskiego poziomu i generatorów liczb losowych po rzeczy wysokiego poziomu, takie jak różniczkowanie algorytmiczne i głębokie sieci neuronowe. Te fragmenty kodu zaczęły się gromadzić. Funkcje te zostały później usunięte i umieszczone w samodzielnej bibliotece o nazwie Owl.

Architektura Owl na początku przeszła co najmniej kilkanaście iteracji, a niektóre zmiany architektoniczne są dość drastyczne. Po rocznym intensywnym rozwoju Owl potrafił wykonywać wiele skomplikowanych zadań numerycznych (np. klasyfikację obrazów). Dr Liang Wang przeprowadził samouczek na konferencji CUFP 2017, aby zademonstrować analizę danych w OCaml. W 2018 r. prof. Richard Mortier wygłosił referat o Sowie w Instytucie Alana Turinga . Aby dalej promować OCaml i programowanie funkcyjne w nauce o danych, Owl zapewnia liczne materiały do ​​nauki w formie szczegółowego podręcznika.

Projekt i funkcje

Owl zaimplementował wiele zaawansowanych funkcji numerycznych oprócz implementacji tablic n-wymiarowych. W porównaniu z innymi bibliotekami numerycznymi, Owl jest wyjątkowy pod wieloma względami, np. różnicowanie algorytmiczne i obliczenia rozproszone zostały włączone jako integralne komponenty systemu rdzenia, aby zmaksymalizować produktywność programistów. Poniższy rysunek przedstawia widok z lotu ptaka na architekturę systemu Owl. Podsystem po lewej stronie to system numeryczny Sowy. Moduły zawarte w tym podsystemie dzielą się na trzy kategorie.

Architektura biblioteki numerycznej Owl.

Pierwszy z nich to moduły podstawowe zawierające podstawowe struktury danych, tj. N-wymiarową tablicę (Ndarray) zarówno w postaci gęstej, jak i rzadkiej. Moduł Ndarray obsługuje różne typy liczb: float32, float64, complex32, complex64, int16, int32 itd. Ponadto moduł podstawowy zapewnia interfejsy funkcji obcych do innych bibliotek numerycznych niskiego poziomu, takich jak CBLAS i LAPACK . Biblioteki te są w pełni połączone z modułem Linear Algebra.

Druga kategoria to klasyczne moduły analityczne. Ta część zawiera podstawowe funkcje matematyczne i statystyczne, algebrę liniową , regresję, optymalizację, kreślenie itp. Zawiera również zaawansowane funkcje matematyczne i statystyczne, takie jak testowanie hipotez statystycznych i łańcuch Markowa Monte Carlo . Podstawową funkcjonalnością Owl jest różnicowanie algorytmiczne (lub automatyczne różnicowanie) i moduły grafu obliczeń dynamicznych.

Najwyższy poziom w architekturze Owl obejmuje moduły bardziej zaawansowanych aplikacji numerycznych, takich jak sieci neuronowe , przetwarzanie języka naturalnego , przetwarzanie danych itp. System Zoo służy do wydajnego pisania skryptów i współdzielenia kodu. Moduły z drugiej kategorii, zwłaszcza różnicowanie algorytmiczne, sprawiają, że kod na tym poziomie jest dość zwięzły.

Podsystem po prawej stronie nazywa się Podsystem Aktora, który rozszerza możliwości Owl na obliczenia równoległe i rozproszone. Główną ideą jest przekształcenie aplikacji użytkownika z trybu wykonywania sekwencyjnego w tryb równoległy (przy użyciu różnych silników obliczeniowych) przy minimalnym wysiłku. Metoda polega na zestawieniu dwóch podsystemów wraz z funktorami w celu wygenerowania równoległej wersji modułu zdefiniowanego w podsystemie numerycznym.

Oprócz tego, co zostało wymienione na tym rysunku, Sowa ma kilka innych funkcji. Na przykład JavaScript i unikernel , integracja z innymi frameworkami, takimi jak TensorFlow i PyTorch , wykorzystanie GPU i innych frameworków akceleratorów poprzez symboliczny wykres itp.

Badania

Projekt Owl jest zorientowany na badania i wspiera badania obliczeń numerycznych w wielu powiązanych tematach. Niektóre z jego tematów badawczych są wymienione poniżej.

  • Projekt synchronicznego, równoległego, rozproszonego uczenia maszynowego. Owl jako pierwszy proponuje użycie próbkowania do synchronizacji węzłów w algorytmach iteracyjnych. Praca opublikowana na arxiv zawiera solidny dowód matematyczny. Pomysł ten okazał się zaawansowany i został później zaproponowany na czołowych konferencjach dotyczących uczenia maszynowego.
  • Jednym z czynników składających się na niewielką bazę kodu Owl jest budowanie zaawansowanych funkcji analitycznych wokół różnicowania algorytmicznego . Pomysł ten również okazał się popularny i rozwinął się w paradygmat programowania różniczkowego . Jest obecnie używany w popularnych pakietach numerycznych, takich jak JuliaDiff.
  • Korzystanie z wykresu obliczeń zapewnia kolejną optymalizację wymiarów obliczeń w Owl. Poza tym wykres obliczeniowy łączy również aplikację Owl i akceleratory sprzętowe, takie jak GPU i TPU . Później wykres obliczeniowy staje się de facto reprezentacją pośrednią. Standardy, takie jak Open Neural Network Exchange i Neural Network Exchange Format, są obecnie szeroko obsługiwane przez różne platformy głębokiego uczenia, takie jak TensorFlow i PyTorch .
  • Idea składu i serwowania na poziomie usług została zbadana w podsystemie Zoo firmy Owl. Prototyp demonstruje usprawnienie różnych etapów tworzenia kodu, w tym komponowanie, testowanie, dystrybucję, sprawdzanie poprawności i wdrażanie. Jest bardzo podobny do późniejszych MLOps . Ostatnio temat ten przyciąga uwagę na czołowych konferencjach systemowych, takich jak OSDI.

W wyniku badań nad częścią tych kierunków Sowa wydaje kilka publikacji. W 2018 roku na ACM SIGCOMM 2018 Workshop on Big Data Analytics and Machine Learning for Data Communication Networks przyjęty został referat zatytułowany Data Analytics Service Composition and Deployment on Edge Devices . Przyjmowane są również dwie prelekcje na OCaml Workshop of the International Conference on Functional Programming 2019, na tematy numerycznego rozwiązywania równań różniczkowych zwyczajnych i wykonywania obliczeń Owl na GPU. Staż w OCaml Labs bada temat segmentacji obrazu i związana z tym optymalizacja pamięci w Owl. W 2022 roku wydawnictwo Springer wydało książkę <<OCaml Scientific Computing>>.

Zobacz też