Apple MLX Łączy znane interfejsy API, możliwe do komponowania transformacje funkcji i leniwe obliczenia, aby stworzyć platformę uczenia maszynowego inspirowaną NumPy i PyTorch zoptymalizowaną pod kątem Apple Silicon. Zaimplementowany w Pythonie i C++ framework ma na celu zapewnienie łatwego w użyciu i wydajnego rozwiązania do szkolenia i wdrażania modeli uczenia maszynowego na Apple Silicon.
Według Apple, MLX został zaprojektowany przez badaczy uczenia maszynowego dla badaczy uczenia maszynowego i wydany na licencji MIT, aby ułatwić jego rozbudowę i ulepszenie. Obsługuje szkolenie modeli języka transformatorowego, generowanie tekstu na dużą skalę za pomocą Mistral, generowanie obrazów za pomocą Stable Diffusion i rozpoznawanie mowy za pomocą Whisper.
MLX oferuje niskopoziomowe API Pythona inspirowane NumPy, a także w pełni funkcjonalne API C++, które ściśle go odzwierciedla. Ponadto zapewnia interfejs API wysokiego poziomu, którego można używać do tworzenia bardziej złożonych modeli zgodnych z interfejsem API PyTorch.
Struktura obsługuje automatyczne różnicowanie, automatyczne wyznaczanie tras i optymalizację wykresów arytmetycznych poprzez komponowalne funkcje, które ułatwiają tworzenie złożonych transformacji tablic. MLX obsługuje również leniwą arytmetykę, co oznacza, że tworzy instancje tablic tylko wtedy, gdy jest to konieczne w celu poprawy wydajności obliczeniowej. Podobnie wykresy arytmetyczne generowane są dynamicznie, więc zmiana kształtu argumentów funkcji nie powoduje powolnych operacji agregacji.
Cechą charakterystyczną MLX jest zastosowanie Apple Silicon Ujednolicona pamięć, co odróżnia go od innych platform uczenia maszynowego, twierdzi Apple. Krótko mówiąc, oznacza to, że tablice znajdują się w pamięci współdzielonej, a operacje na tablicach można wykonywać zarówno na procesorze CPU, jak i na karcie graficznej, bez przenoszenia danych przez pamięć. Na przykład, gdy tworzysz tablicę, nie musisz określać jej lokalizacji, ponieważ znajduje się ona w ujednoliconej pamięci, a Ty decydujesz, czy przeprowadzić na niej transformację na CPU czy GPU podczas jej wykonywania:
a = mx.random.normal((100,))
b = mx.random.normal((100,))
mx.add(a, b, stream=mx.cpu)
mx.add(a, b, stream=mx.gpu)
MLX może być używany na dowolnym procesorze Apple Silicon, w tym na M1, i może wykorzystywać zintegrowany procesor graficzny, dzięki czemu badacze mogą wybrać sprzęt najlepiej odpowiadający ich potrzebom.
Repozytorium MLX zawiera kilka przykładów użycia go z różnymi modelami, w tym BERT, Llama, Mistral, Stable Diffusion i nie tylko. Każdy przykład zawiera listę zależności wymaganych w pliku requirements.txt
Plik zawiera gotowe do użycia narzędzia CLI. Na przykład, aby utworzyć obrazy przy użyciu Stable Diffusion, najpierw zainstaluj wszystkie wymagane zależności, a następnie uruchom plik txt2image.py
On zamawia:
pip install -r requirements.txt
python txt2image.py "A photo of an astronaut riding a horse on Mars." --n_images 4 --n_rows 2
Apple nie udostępniło jeszcze publicznych testów porównawczych, więc nie wiemy, jak wypada w porównaniu z nimi BayTorch/MPS Albo Georgy Zirganow Lama.cpp.
Jednak przykład Stable Diffusion zawiera porównanie wydajności UNet Stable Diffusion po uruchomieniu przez PyTorch i MLX. Pokazuje to, że MLX osiąga o około 40% wyższą przepustowość niż PyTorch przy wielkości partii 16 i o około 15% większą przy porównaniu idealnych wielkości partii.
Jednak PyTorch działa najlepiej w przypadku mniejszych partii, z około 50% większą przepustowością dla partii o wielkości 1 i około 10% wyższą dla partii o wielkości 4. Według Apple przewagę PyTorch w tych przypadkach można wytłumaczyć szybkością kompilacji. modele nie są ładowane do pamięci, a jądro wykresu MPS PyTorch nie jest buforowane.
Jeśli jesteś zainteresowany wypróbowaniem MLX, możesz się do niego udać Skrócona instrukcja obsługi Lub Pełna dokumentacja.