Перейти к содержимому

Intellicode visual studio что это

  • автор:

Создание первой модели глубокого обучения Visual Studio IntelliCode: исследовательский путь

С тех пор, как первая модель завершения кода IntelliCode была представлена в Visual Studio и Visual Studio Code в 2018 году, она стала важным помощником по кодингу для миллионов разработчиков по всему миру. В последние два года мы постоянно работали над тем, чтобы адаптировать IntelliCode для большего количества языков программирования, а в то же время изучали способы повышения точности и покрытия модели, чтобы обеспечить еще большее удовлетворение пользователей. Одним из наших основных исследовательских усилий было привнести последние достижения в области глубокого обучения для моделирования естественного языка в моделирование языков программирования. После использования таких технологий, как машинное обучение Azure и среда выполнения ONNX, мы успешно реализовали первую модель глубокого обучения для всех пользователей IntelliCode Python в Visual Studio Code.

Исследовательский путь

Путешествие началось с исследования в области применения методов языкового моделирования в обработке естественного языка для изучения кода Python. Мы сосредоточились на текущем сценарии завершения IntelliCode, как показано на рисунке ниже.

Основная задача — найти наиболее вероятный фрагмент (member) типа с учетом фрагмента кода, предшествующего вызову фрагмента (member-а). Другими словами, учитывая исходный фрагмент кода C, словарь V и набор всех возможных методов M ⊂ V, мы хотели бы определить:

Чтобы найти этот фрагмент, нам нужно построить модель, способную предсказывать вероятность доступных фрагментов.

Предыдущие современные подходы на основе рекуррентных нейронных сетей (RNN) использовали только последовательную природу исходного кода, пытаясь передать методы естественного языка без использования уникальных характеристик синтаксиса языка программирования и семантики кода. Природа проблемы завершения кода сделала многообещающим кандидатом на использование сети с долговременной краткосрочной памятью (LSTM). Во время подготовки данных для обучения модели мы использовали частичное абстрактное синтаксическое дерево (AST), соответствующее фрагментам кода, содержащим выражения доступа к фрагментам (member) и вызовы функций модуля, с целью захвата семантики, переносимой удаленным кодом.

Обучение глубоких нейронных сетей — это ресурсоемкая задача, требующая высокопроизводительных вычислительных кластеров. Мы использовали распределенную структуру обучения с параллельными данными Horovod с оптимизатором Adam, сохраняя копию всей нейронной модели на каждом воркере, обрабатывая разные мини-пакеты обучающего набора данных параллельно. Мы использовали машинное обучение Azure для обучения моделей и настройки гиперпараметров, поскольку его кластерная служба графического процессора по требованию упростила масштабирование нашего обучения по мере необходимости, а также помогла подготовить и управлять кластерами виртуальных машин, планировать задания, собирать результаты и обрабатывать неудачи. В таблице показаны модели архитектуры, которые мы опробовали, а также их соответствующая точность и размер модели.

Мы выбрали производство с прогнозируемым внедрением из-за меньшего размера модели и повышения точности модели на 20% по сравнению с предыдущей производственной моделью во время автономной оценки модели; размер модели имеет решающее значение для развертывания в продакшене.

Архитектура модели показана на рисунке ниже:

Чтобы развернуть модель LSTM в проде, нам пришлось улучшить скорость вывода модели и объем памяти, чтобы удовлетворить требованиям завершения кода во время редактирования. Наш бюджет памяти составлял около 50 МБ, и нам нужно было поддерживать среднюю скорость вывода менее 50 миллисекунд. Модель IntelliCode LSTM была обучена с помощью TensorFlow, и мы выбрали ONNX Runtime для вывода, чтобы получить максимальную производительность. ONNX Runtime работает с популярными платформами глубокого обучения и упрощает интеграцию в различные обслуживающие среды, предоставляя API-интерфейсы, охватывающие множество языков, включая Python, C, C++, C#, Java и JavaScript — мы использовали API-интерфейсы C#, совместимые с .NET Core, чтобы интегрировать в Microsoft Python Language Server.

Квантование — это эффективный подход для уменьшения размера модели и повышения производительности, если допустимо падение точности, вызванное приближением чисел с малой разрядностью. С квантованием INT8 после обучения, обеспечиваемым ONNX Runtime, результирующее улучшение было значительным: объем памяти и время вывода были сокращены примерно до четверти предварительно квантованных значений по сравнению с исходной моделью с приемлемым сокращением на 3% точность модели. Вы можете найти подробную информацию о дизайне архитектуры модели, настройке гиперпараметров, точности и производительности в исследовательской статье, которую мы опубликовали на конференции KDD 2019.

Последним этапом выпуска в продакшн было проведение онлайн-экспериментов A/B, сравнивающих новую модель LSTM и предыдущую рабочую модель. Результаты онлайн-экспериментов A/B в таблице ниже показали примерно 25% улучшение точности рекомендаций первого уровня (точность первого рекомендованного элемента завершения в списке завершения) и 17% улучшение среднего обратного ранга (MRR), что убедило нас, что новая модель LSTM значительно лучше предыдущей модели.

Разработчики Python: попробуйте дополнения IntelliCode и отправьте нам свой отзыв!

Благодаря большим усилиям команды мы завершили поэтапное развертывание первой модели глубокого обучения для всех пользователей IntelliCode Python в Visual Studio Code. В последней версии расширения IntelliCode для Visual Studio Code мы также интегрировали среду выполнения ONNX и модель LSTM для работы с новым расширением Pylance, которое полностью написано на TypeScript. Если вы разработчик Python, установите расширение IntelliCode и поделитесь с нами своим мнением.

  • IntelliCode
  • microsoft
  • visual studio
  • Блог компании Microsoft
  • Python
  • Visual Studio
  • Microsoft Azure
  • Машинное обучение

IntelliCode for C# Dev Kit

For users of the C# Dev Kit extension in Visual Studio Code, the IntelliCode for C# Dev Kit extension is available to provide IntelliCode support. Predictions of up to a whole-line of code, along with ranking methods and properties in the IntelliSense list are available for C# Dev Kit users.

Whole line suggestions

Scenario 1: When grey-text is shown, press Tab to accept the prediction (suggestion).

Scenario 2: When grey-text is shown along with the IntelliSense list, press Tab to accept the IntelliSense list selection, then Tab again to accept the rest of the multi-token prediction. In this scenario, you can use the IntelliSense list selection to steer the multi-token prediction offered by IntelliCode.

Additionally, if the model is suggesting that a string should exist, but does not have a suggestion for the string, pressing Tab places the cursor into the empty string, making it easier for you to complete your line of code.

This model makes predictions on what you’ll type next based on a rich knowledge of what you have coded so far, which includes:

  • Variable names and positions
  • Libraries you’re using
  • Functions in nearby code
  • The IntelliSense list

Starred suggestions

This extension provides AI-assisted IntelliSense by showing recommended completion items for your code context at the top of the completions list.

Ranks methods and properties in the IntelliSense list with stars

When it comes to overloads, rather than taking the time to cycle through the alphabetical list of member, IntelliCode presents the most relevant one first. This extension not only ranks known methods, but its deep learning model also ranks methods that are unique to your code.

To see AI-assisted ranking in the IntelliSense list, you must first open a C# file that is a part of a solution. C# files that aren’t a part of a solution won’t have this functionality available.

Security and Privacy

All your code stays local – the model runs right on your computer — so there’s no need to transmit code to a remote server for custom model training. This is enabled by our machine learning system design, which led to dramatically reduced memory footprint and improved inference speed.

Since models powering IntelliCode features run on your local machine, this allows IntelliCode support to be available in offline and air gapped environments.

Get support for other languages

To get IntelliCode whole-line autocompletions for Python, JavaScript, and TypeScript in VS Code, install the general IntelliCode extension. The general extension also ranks methods and properties in the IntelliSense list with stars for Python and SQL, in addition to the languages supported for whole-line autocomplete.

Prerequisites

In order to use this extension, you must have both the C# Dev Kit and .NET 6 installed and enabled on your machine. This extension supports the following platforms and operating systems:

  • Windows: x64 and ARM
    • x64 & ARM tested on Windows 11 22H2
    • x64 tested on OS X Monterey v12.6.5
    • ARM tested on OS X v PENDING
    • x64 Tested on Ubuntu 22.04

    How do I report feedback and issues

    You can file an issue on our IntelliCode for VS Code extension GitHub feedback repo.

    IntelliCode теперь и в TypeScript/JavaScript

    На Build 2018 мы анонсировали Visual Studio IntelliCode: набор AI-инструментов, которые способствуют более качественной разработке. В сотрудничестве с командой IntelliCode мы рады сообщить, что теперь IntelliCode доступен пользователям TypeScript/JavaScript через расширение IntelliCode для VS Code.

    Что такое IntelliCode?

    IntelliCode дополняет IntelliSense, рекомендуя часто используемые элементы завершения для текущего контекста в верхней части списка. Эти контекстуальные рекомендации основаны на общих методах, полученных в ходе обучения IntelliCode тысячами реальных проектов. Это экономит ваше время, помещая то, что вы, скорее всего, будете использовать, вверху списка: вам не придется искать в алфавитном порядке.

    Как это работает для TypeScript/JavaScript?

    Установите расширение Visual Studio IntelliCode через магазинили установите его на вкладке «Расширения» в Visual Studio Code. Затем просто откройте файл TypeScript или JavaScript и начните редактирование. Вы начнете видеть рекомендации IntelliCode помеченными и поднятыми в начало вашего списка завершений.

    IntelliCode изменит свои рекомендации в зависимости от контекста и отсортирует варианты по релевантности в данной конкретной ситуации. Например, если элемент, такой как map, используется в условном выражении или цикле, вы увидите методы, которые вы, скорее всего, использовали бы для создания условия. Если вы проверите завершения для map уже внутри условного выражения, вы увидите другой список предложений.

    IntelliCode также поможет вам в различных библиотеках JavaScript, независимо от того, пишете ли вы код на стороне клиента с помощью таких библиотек, как React, Angular или Vue, или выполняете разработку на стороне сервера с помощью Node.js и Express.

    Как сообщать об ошибках и проблемах?

    IntelliCode пока находится в preview. Если вдруг вы найдете ошибку в расширении, мы будем очень рады, если вы расскажете нам о ней на GitHub.

    Intellicode visual studio что это

    IntelliCode помогает повысить точность и согласованность, предоставляя подсказки для завершения кода, которые могут быть размером в целую строку. ИИ определяет контекст кода, в том числе имена переменных, назначение и тип создаваемого кода, чтобы предоставить вам оптимальные рекомендации. И это еще не всё! IntelliCode работает локально на вашем компьютере, гарантируя конфиденциальность закрытого кода.

    Доступно для C# в Visual Studio 2022.

    Доступно для Python в Visual Studio Code.

    Не только IntelliSense

    IntelliCode размещает то, что вы вероятнее всего используете, наверху списка завершения IntelliSense. Эти подсказки, экономящие ваше время, основаны на анализе тысяч фрагментов открытого кода, внесенного разработчиками в GitHub. Для некоторых языков программирования вы можете даже добавлять собственные настраиваемые методы и свойства базы кода.

    Доступно для Visual Studio 2022: C#, C++, Java, SQL, XAML в Visual Studio 2022.

    Доступно для Visual Studio Code: TypeScript/JavaScript и Python в Visual Studio Code.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *