Vordenker

Vermeiden der versteckten Gefahren: Navigation durch nicht offensichtliche Fallstricke in ML auf iOS

mm
Unite.AI zu deinen bevorzugten Quellen auf Google hinzufügen

Brauchen Sie ML?

Maschinelles Lernen ist hervorragend darin, Muster zu erkennen. Wenn Sie es schaffen, eine saubere Datenmenge für Ihre Aufgabe zu sammeln, ist es normalerweise nur eine Frage der Zeit, bevor Sie ein ML-Modell mit übermenschlicher Leistung aufbauen können. Dies gilt insbesondere für klassische Aufgaben wie Klassifizierung, Regression und Anomalie-Erkennung.

Wenn Sie bereit sind, einige Ihrer Geschäftsprobleme mit ML zu lösen, müssen Sie berücksichtigen, wo Ihre ML-Modelle ausgeführt werden. Für einige macht es Sinn, eine Server-Infrastruktur auszuführen. Dies hat den Vorteil, dass Ihre ML-Modelle privat bleiben, sodass es für Konkurrenten schwieriger ist, nachzukommen. Darüber hinaus können Server eine Vielzahl von Modellen ausführen. Zum Beispiel benötigen GPT-Modelle (die mit ChatGPT berühmt wurden) moderne GPUs, sodass Consumer-Geräte ausgeschlossen sind. Auf der anderen Seite ist die Wartung Ihrer Infrastruktur ziemlich teuer, und wenn ein Consumer-Gerät Ihr Modell ausführen kann, warum zahlen Sie mehr? Darüber hinaus können auch Datenschutzbedenken bestehen, bei denen Sie Benutzerdaten nicht an einen Remote-Server senden können, um sie zu verarbeiten.

Nehmen wir jedoch an, es macht Sinn, die iOS-Geräte Ihrer Kunden zu verwenden, um ein ML-Modell auszuführen. Was könnte schiefgehen?

Plattform-Einschränkungen

Speicher-Beschränkungen

iOS-Geräte haben viel weniger verfügbaren Video-Speicher als ihre Desktop-Pendants. Zum Beispiel hat die aktuelle Nvidia RTX 4080 Ti 20 GB verfügbaren Speicher. iPhones hingegen haben Video-Speicher, der mit dem Rest des RAM in dem, was sie “unified memory” nennen, geteilt wird. Zum Vergleich hat das iPhone 14 Pro 6 GB RAM. Darüber hinaus ist es sehr wahrscheinlich, dass iOS die App beendet, um sicherzustellen, dass das Betriebssystem reaktiv bleibt, wenn Sie mehr als die Hälfte des Speichers zuweisen. Dies bedeutet, dass Sie nur mit 2-3 GB verfügbarem Speicher für die neuronale Netzwerkinferenz rechnen können.

Forscher trainieren ihre Modelle normalerweise, um die Genauigkeit über den Speicherbedarf zu optimieren. Es gibt jedoch auch Forschungsergebnisse über Möglichkeiten, die Geschwindigkeit und den Speicherbedarf zu optimieren, sodass Sie entweder nach weniger anspruchsvollen Modellen suchen oder selbst eines trainieren können.

Netzwerkschichten (Operationen) Unterstützung

Die meisten ML- und neuronalen Netze stammen aus bekannten Deep-Learning-Frameworks und werden dann in CoreML-Modelle mit Core ML Tools konvertiert. CoreML ist ein Inferenz-Engine, der von Apple (AAPL ) entwickelt wurde und der verschiedene Modelle auf Apple-Geräten ausführen kann. Die Schichten sind für die Hardware optimiert und die Liste der unterstützten Schichten ist ziemlich lang, sodass dies ein hervorragender Ausgangspunkt ist. Es gibt jedoch auch andere Optionen wie Tensorflow Lite.

Der beste Weg, um zu sehen, was mit CoreML möglich ist, ist, sich bereits konvertierte Modelle mit Viewern wie Netron anzusehen. Apple listet einige der offiziell unterstützten Modelle auf, aber es gibt auch community-getriebene Model-Zoos. Die vollständige Liste der unterstützten Operationen ändert sich ständig, sodass es hilfreich sein kann, den Core-ML-Tools-Quellcode als Ausgangspunkt zu betrachten. Zum Beispiel können Sie, wenn Sie ein PyTorch-Modell konvertieren möchten, versuchen, die notwendige Schicht hier zu finden.

Darüber hinaus können bestimmte neue Architekturen handgeschriebenen CUDA-Code für einige der Schichten enthalten. In solchen Situationen können Sie nicht erwarten, dass CoreML eine vordefinierte Schicht bereitstellt. Dennoch können Sie eine eigene Implementierung bereitstellen, wenn Sie einen erfahrenen Ingenieur haben, der mit der Erstellung von GPU-Code vertraut ist.

Insgesamt ist der beste Rat hier, Ihr Modell so früh wie möglich in CoreML zu konvertieren, sogar bevor Sie es trainieren. Wenn Sie ein Modell haben, das nicht sofort konvertiert wurde, ist es möglich, die neuronale Netzwerk-Definition in Ihrem DL-Framework oder dem Core-ML-Tools-Konverter-Quellcode zu ändern, um ein gültiges CoreML-Modell zu erzeugen, ohne dass Sie eine benutzerdefinierte Schicht für die CoreML-Inferenz schreiben müssen.

Validierung

Inferenz-Engine-Bugs

Es gibt keine Möglichkeit, jede mögliche Kombination von Schichten zu testen, sodass der Inferenz-Engine immer einige Bugs haben wird. Zum Beispiel ist es häufig zu sehen, dass dilatierte Konvolutionen mit CoreML viel zu viel Speicher verbrauchen, was wahrscheinlich auf eine schlecht geschriebene Implementierung mit einem großen Kernel, der mit Nullen gepaddet ist, hinweist. Ein weiterer häufiger Bug ist die falsche Modellausgabe für einige Modell-Architekturen.

In diesem Fall kann die Reihenfolge der Operationen eine Rolle spielen. Es ist möglich, falsche Ergebnisse zu erhalten, je nachdem, ob die Aktivierung mit der Konvolution oder der Residual-Verbindung zuerst kommt. Der einzige echte Weg, um sicherzustellen, dass alles ordnungsgemäß funktioniert, ist, Ihr Modell zu nehmen, es auf dem beabsichtigten Gerät auszuführen und das Ergebnis mit einer Desktop-Version zu vergleichen. Für diesen Test ist es hilfreich, mindestens ein halb trainiertes Modell zur Verfügung zu haben, da der numerische Fehler für schlecht initialisierte Modelle akkumulieren kann. Obwohl das endgültig trainierte Modell ordnungsgemäß funktioniert, können die Ergebnisse zwischen dem Gerät und dem Desktop für ein zufällig initialisiertes Modell ziemlich unterschiedlich sein.

Präzisionsverlust

Das iPhone verwendet halbpräzise Genauigkeit umfassend für die Inferenz. Während einige Modelle keine bemerkbare Genauigkeitsverschlechterung aufgrund der geringeren Anzahl von Bits in der Fließkommadarstellung haben, können andere Modelle leiden. Sie können den Präzisionsverlust approximieren, indem Sie Ihr Modell auf dem Desktop mit halbpräziser Genauigkeit auswerten und eine Testmetrik für Ihr Modell berechnen. Eine noch bessere Methode ist, es auf einem tatsächlichen Gerät auszuführen, um zu sehen, ob das Modell so genau ist, wie beabsichtigt.

Profiling

Verschiedene iPhone-Modelle haben unterschiedliche Hardware-Fähigkeiten. Die neuesten Modelle haben verbesserte Neural-Engine-Verarbeitungseinheiten, die die Gesamtleistung erheblich steigern können. Sie sind für bestimmte Operationen optimiert und CoreML kann die Arbeit intelligent zwischen CPU, GPU und Neural Engine verteilen. Apple-GPUs haben sich auch im Laufe der Zeit verbessert, sodass es normal ist, dass die Leistung über verschiedene iPhone-Modelle hinweg schwankt. Es ist eine gute Idee, Ihre Modelle auf minimal unterstützten Geräten zu testen, um die maximale Kompatibilität und akzeptable Leistung für ältere Geräte sicherzustellen.

Es ist auch erwähnenswert, dass CoreML einige der Zwischenschichten und Berechnungen in-place optimieren kann, was die Leistung erheblich verbessern kann. Ein weiterer Faktor, der berücksichtigt werden sollte, ist, dass manchmal ein Modell, das auf einem Desktop schlechter performt, tatsächlich schneller auf iOS inferieren kann. Dies bedeutet, dass es sich lohnt, einige Zeit mit dem Experimentieren mit verschiedenen Architekturen zu verbringen.

Für noch mehr Optimierung hat Xcode ein schönes Instruments-Tool mit einem Template nur für CoreML-Modelle, das einen tieferen Einblick in das geben kann, was Ihre Modellinferenz verlangsamt.

Schlussfolgerung

Niemand kann alle möglichen Fallstricke vorhersehen, wenn er ML-Modelle für iOS entwickelt. Es gibt jedoch einige Fehler, die vermieden werden können, wenn man weiß, worauf man achten muss. Beginnen Sie damit, Ihre ML-Modelle so früh wie möglich zu konvertieren, zu validieren und zu profilieren, um sicherzustellen, dass Ihr Modell ordnungsgemäß funktioniert und Ihren Geschäftsanforderungen entspricht, und folgen Sie den oben genannten Tipps, um Erfolg so schnell wie möglich zu erzielen.

Konstantin Semianov, ist CTO von Neatsy.AI, der weltweit ersten App, die orthopädische und podologische Gesundheitsprobleme mithilfe von KI und AR mit nur einer iPhone-Kamera erkennt. Vor Neatsy.AI arbeitete er als R&D-Ingenieur bei Prisma Labs, den Erfindern der Lensa-App.