Erstellen Ihres ersten Visual Studio IntelliCode Deep Learning-Modells: Ein Erkundungspfad

Seit der Einführung des ersten IntelliCode- Code-Vervollständigungsmodells in Visual Studio und Visual Studio Code im Jahr 2018 ist es für Millionen von Entwicklern auf der ganzen Welt zu einer unverzichtbaren Codierungshilfe geworden. In den letzten zwei Jahren haben wir kontinuierlich daran gearbeitet, IntelliCode an mehr Programmiersprachen anzupassen, und gleichzeitig nach Möglichkeiten gesucht, die Modellgenauigkeit und -abdeckung zu verbessern, um die Benutzerzufriedenheit noch weiter zu steigern. Eine unserer Hauptforschungsbemühungen bestand darin, die neuesten Fortschritte beim Deep Learning für die Modellierung natürlicher Sprachen in die Modellierung von Programmiersprachen einzubringen. Nach dem Einsatz von Technologien wie Azure Machine Learning und ONNX RuntimeWir haben das erste Deep-Learning-Modell für alle IntelliCode Python-Benutzer erfolgreich in Visual Studio Code implementiert.







Forschungspfad



Die Reise begann mit der Erforschung der Anwendung von Sprachmodellierungstechniken in der Verarbeitung natürlicher Sprache zum Erlernen von Python-Code. Wir haben uns auf das aktuelle IntelliCode-Abschlussskript konzentriert (siehe Abbildung unten).







Die Hauptaufgabe besteht darin, das wahrscheinlichste Fragment (Mitglied) des Typs zu finden, wobei das Codefragment vor dem Aufruf des Fragments (Mitglied) berücksichtigt wird. Mit anderen Worten, angesichts des ursprünglichen Code-Snippets C, des Vokabulars V und der Menge aller möglichen Methoden M ⊂ V möchten wir definieren:





Um dieses Fragment zu finden, müssen wir ein Modell erstellen, das die Wahrscheinlichkeit verfügbarer Fragmente vorhersagen kann.



Frühere moderne Ansätze, die auf wiederkehrenden neuronalen Netzen ( RNN ) basierten, verwendeten nur die sequentielle Natur des Quellcodes und versuchten, Techniken der natürlichen Sprache zu vermitteln, ohne die einzigartigen Eigenschaften der Syntax der Programmiersprache und der Codesemantik zu nutzen. Die Art des Code-Vervollständigungsproblems hat es zu einem vielversprechenden Kandidaten für das Langzeit-Kurzzeitgedächtnis ( LSTM) gemacht). Bei der Vorbereitung der Daten für das Training des Modells haben wir einen partiellen abstrakten Syntaxbaum (AST) verwendet, der Codeausschnitten entspricht, die Mitgliedszugriffsausdrücke und Modulfunktionsaufrufe enthalten, um die vom Remotecode übertragene Semantik zu erfassen.



Das Training tiefer neuronaler Netze ist eine ressourcenintensive Aufgabe, die Hochleistungs-Computing-Cluster erfordert. Wir haben Horovods verteiltes paralleles Trainingsframework mit dem Adam- Optimierer verwendet , eine Kopie des gesamten neuronalen Modells für jeden Mitarbeiter gespeichert und verschiedene Mini-Batches des Trainingsdatensatzes parallel verarbeitet. Wir haben Azure Machine Learning verwendetFür das Modelltraining und die Optimierung von Hyperparametern war es aufgrund des GPU-On-Demand-Clusterdienstes einfach, unser Training nach Bedarf zu skalieren. Außerdem konnten VM-Cluster bereitgestellt und verwaltet, Jobs geplant, Ergebnisse gesammelt und Fehler behandelt werden. Die Tabelle zeigt die von uns getesteten Architekturmodelle sowie deren jeweilige Genauigkeit und Modellgröße.





Wir haben uns für die Herstellung von Predictive Implementation entschieden, da die Modellgröße kleiner und die Modellgenauigkeit bei der Offline-Modellbewertung um 20% gegenüber dem vorherigen Produktionsmodell verbessert wurde. Die Modellgröße ist für Produktionsbereitstellungen von entscheidender Bedeutung.



Die Architektur des Modells ist in der folgenden Abbildung dargestellt:





Um das LSTM in der Produktion bereitzustellen, mussten wir die Modellinferenzgeschwindigkeit und den Speicherbedarf verbessern, um die Anforderungen an die Codevervollständigung während der Bearbeitung zu erfüllen. Unser Speicherbudget betrug ungefähr 50 MB und wir mussten die durchschnittliche Ausgabegeschwindigkeit unter 50 Millisekunden halten. Der IntelliCode LSTM wurde mit TensorFlow trainiert und wir haben ONNX Runtime ausgewählt, um die beste Leistung zu erzielen. ONNX Runtime arbeitet mit gängigen Deep-Learning-Frameworks und erleichtert die Integration in eine Vielzahl von Serving-Umgebungen, indem APIs bereitgestellt werden, die mehrere Sprachen umfassen, einschließlich Python, C, C ++, C #, Java und JavaScript. Wir haben C # -APIs verwendet, die mit .NET Core kompatibel sind in Microsoft Python Language Server zu integrieren .



Die Quantisierung ist ein effektiver Ansatz zur Reduzierung der Modellgröße und zur Verbesserung der Leistung, wenn der durch die Annäherung an niedrige Ziffern verursachte Genauigkeitsverlust akzeptabel ist. Mit der von ONNX Runtime bereitgestellten INT8-Quantisierung nach dem Training war die daraus resultierende Verbesserung signifikant: Der Speicherbedarf und die Inferenzzeit wurden im Vergleich zum ursprünglichen Modell auf etwa ein Viertel der vorquantisierten Werte reduziert, wobei die Modellgenauigkeit um akzeptable 3% verringert wurde. Detaillierte Informationen zum Design der Modellarchitektur, zur Optimierung der Hyperparameter, zur Genauigkeit und zur Leistung finden Sie in einem Forschungsbericht , den wir auf der KDD 2019-Konferenz veröffentlicht haben.



Die letzte Phase der Freigabe für die Produktion bestand darin, Online-A / B-Experimente durchzuführen, bei denen das neue LSTM-Modell mit dem vorherigen Arbeitsmodell verglichen wurde. Die Ergebnisse des Online-A / B-Experiments in der folgenden Tabelle zeigten eine Verbesserung der Genauigkeit der Empfehlungen der ersten Ebene um ca. 25% (Genauigkeit des ersten empfohlenen Abschlusselements in der Abschlussliste) und eine Verbesserung des mittleren inversen Ranges (MRR) um 17%, was uns davon überzeugte, dass das neue LSTM-Modell signifikant besser ist. das Vorgängermodell.





Python-Entwickler: Probieren Sie die IntelliCode-Add-Ons aus und senden Sie uns Ihr Feedback!



Dank viel Teamarbeit haben wir die schrittweise Einführung des ersten Deep-Learning-Modells für alle IntelliCode Python- Benutzer in Visual Studio Code abgeschlossen . In der neuesten Version der IntelliCode-Erweiterung für Visual Studio Code haben wir auch die ONNX-Laufzeit und LSTM integriert, um mit der neuen Pylance- Erweiterung zu arbeiten , die vollständig in TypeScript geschrieben ist. Wenn Sie ein Python-Entwickler sind, installieren Sie die IntelliCode-Erweiterung und teilen Sie uns Ihre Meinung mit.



All Articles