«Модели генерации кода Code Llama от Meta теперь доступны через Amazon SageMaker JumpStart».
«Приложение Code Llama для генерации кода теперь доступно через Amazon SageMaker JumpStart»
Сегодня мы с радостью анонсируем модели Code Llama foundation, разработанные компанией Meta, которые доступны для клиентов через Amazon SageMaker JumpStart, чтобы развернуть их с одним щелчком для выполнения вывода. Code Llama – это современная модель обработки естественного языка (EJЯ), способная генерировать код и естественный язык о коде как с помощью кода, так и с помощью естественноязыковых подсказок. Code Llama бесплатна для исследовательского и коммерческого использования. Вы можете опробовать эту модель с помощью SageMaker JumpStart, платформы машинного обучения (ML), которая предоставляет доступ к алгоритмам, моделям и решениям ML, чтобы вы могли быстро начать работу с ML. В этой статье мы рассмотрим, как найти и развернуть модель Code Llama через SageMaker JumpStart.
Что такое Code Llama
Code Llama – это модель, разработанная компанией Meta на основе Llama 2 и является современной моделью, разработанной для повышения производительности для задач программирования разработчиков путем помощи им в создании качественного документированного кода. Модели демонстрируют современную производительность на языках Python, C++, Java, PHP, C#, TypeScript и Bash и могут экономить время разработчикам и улучшить эффективность рабочих процессов по созданию программного обеспечения. Они представлены в трех вариантах, разработанных для охвата широкого спектра приложений: базовая модель (Code Llama), специализированная модель Python (Code Llama-Python) и модель для следования инструкциям для понимания естественноязыковых инструкций (Code Llama-Instruct). Все варианты Code Llama доступны в трех размерах: 7B, 13B и 34B параметров. Модели 7B и 13B базовых и инструкционных вариантов поддерживают восстановление на основе окружающего контента, что делает их идеальными для приложений по созданию кода.
Модели были разработаны на основе Llama 2 и обучены на 500 миллиардах токенов кода, при этом специализированная версия Python была обучена на инкрементальных 100 миллиардах токенов. Модели Code Llama способны давать стабильные результаты с использованием контекста до 100 000 токенов. Все модели обучаются на последовательностях из 16 000 токенов и демонстрируют улучшения на вводах до 100 000 токенов.
Модель предоставляется на тех же условиях общественной лицензии, что и Llama 2.
- Построение от начала до конца конвейера MLOps для визуальной проверки качества на краю – Часть 2
- Создание конвейера MLOps от начала до конца для визуальной проверки качества на краю – Часть 3
- Улучшите качество прогнозирования в индивидуальных моделях классификации с помощью Amazon Comprehend
Что такое SageMaker JumpStart
С помощью SageMaker JumpStart практики машинного обучения могут выбирать из растущего списка лучших фундаментальных моделей. Практики машинного обучения могут развертывать фундаментальные модели в выделенных экземплярах Amazon SageMaker в изолированной сети и настраивать модели с помощью SageMaker для обучения и развертывания моделей.
Теперь вы можете находить и разворачивать модели Code Llama всего несколькими кликами в Amazon SageMaker Studio или программным путем с помощью SageMaker Python SDK, что позволяет оценить производительность модели и управлять MLOps с помощью функций SageMaker, таких как Amazon SageMaker Pipelines, Amazon SageMaker Debugger или записей журналов контейнера. Модель развертывается в безопасной среде AWS под вашим управлением VPC, что обеспечивает безопасность данных. Модели Code Llama можно находить и разворачивать в регионах US East (N. Virginia), US West (Oregon) и Europe (Ireland).
Клиенты должны принять EULA, чтобы развернуть модель с помощью SDK SageMaker.
Нахождение моделей
Вы можете получить доступ к фундаментальным моделям Code Llama через SageMaker JumpStart в пользовательском интерфейсе SageMaker Studio и SageMaker Python SDK. В этом разделе мы рассмотрим, как найти модели в SageMaker Studio.
SageMaker Studio – это интегрированная среда разработки (IDE), которая предоставляет единственный веб-интерфейс, где вы можете использовать специальные инструменты для выполнения всех шагов разработки ML, от подготовки данных до создания, тренировки и развертывания моделей ML. Для получения подробной информации о том, как начать работу и настроить SageMaker Studio, обратитесь к Amazon SageMaker Studio.
В SageMaker Studio вы можете получить доступ к SageMaker JumpStart, который содержит предварительно обученные модели, блокноты и заранее созданные решения, в разделе Предварительно построенные и автоматизированные решения.
На странице загрузки SageMaker JumpStart вы можете просматривать решения, модели, блокноты и другие ресурсы. Модели Code Llama можно найти в карусели Основные модели: Генерация текста.
Также вы можете найти другие варианты моделей, выбрав Исследовать все модели генерации текста или выполнив поиск Code Llama.
Вы можете выбрать карточку модели, чтобы просмотреть подробности о модели, такие как лицензия, данные, использованные для обучения, и инструкции по использованию. Вы также найдете две кнопки, Развернуть и Открыть блокнот, которые помогут вам использовать модель.
Развернуть
При выборе Развернуть и согласии с условиями будет запущено развертывание. Кроме того, вы можете развернуть через пример блокнота, выбрав Открыть блокнот. Примерный блокнот предоставляет полное руководство по развертыванию модели для вывода результатов и очистке ресурсов.
Для развертывания с использованием блокнота, мы начинаем с выбора соответствующей модели, указанной как model_id
. Вы можете развернуть любую из выбранных моделей на SageMaker с помощью следующего кода:
from sagemaker.jumpstart.model import JumpStartModelmodel = JumpStartModel(model_id="meta-textgeneration-llama-codellama-7b")predictor = model.deploy()
Это развертывает модель на SageMaker с настройками по умолчанию, включая тип экземпляра и конфигурацию VPC по умолчанию. Вы можете изменить эти настройки, указав нестандартные значения в JumpStartModel. После развертывания вы можете выполнять вывод на развернутый конечный пункт с помощью SageMaker predictor:
payload = { "inputs": "<s>[INST] Как развернуть модель на Amazon SageMaker? [/INST]", "parameters": {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}}predictor.predict(payload, custom_attributes="accept_eula=true")
Обратите внимание, что по умолчанию значение accept_eula
установлено как false
. Вам необходимо установить accept_eula=true
, чтобы успешно вызвать конечный пункт. При этом вы принимаете пользовательское соглашение и политику об приемлемом использовании, как указано ранее. Вы также можете скачать пользовательское соглашение.
Атрибуты custom_attributes
, используемые для передачи EULA, представляют собой пары ключ/значение. Ключ и значение разделены знаком =, а пары разделены символом ;. Если пользователь передает один и тот же ключ несколько раз, последнее значение сохраняется и передается обработчику скрипта (в данном случае используется для условной логики). Например, если на сервер передается accept_eula=false; accept_eula=true
, то значение accept_eula=true
сохраняется и передается обработчику скрипта.
Параметры вывода управляют процессом генерации текста на конечном пункте. Параметр максимальное количество новых токенов контролирует размер сгенерированного моделью вывода. Обратите внимание, что это не то же самое, что количество слов, потому что словарь модели не соответствует словарю английского языка, и каждый токен может не являться словом английского языка. Параметр температура контролирует уровень случайности в выводе. Более высокая температура приводит к более творческим и фантазийным выводам. Все параметры вывода являются необязательными.
Следующая таблица перечисляет все модели Code Llama, доступные в SageMaker JumpStart, а также идентификаторы моделей, типы экземпляров по умолчанию и максимальное количество поддерживаемых токенов (сумма количества входных токенов и количества сгенерированных токенов для всех одновременных запросов) для каждой из этих моделей.
Название модели | Идентификатор модели | Тип экземпляра по умолчанию | Максимальное количество поддерживаемых токенов |
CodeLlama-7b | meta-textgeneration-llama-codellama-7b | ml.g5.2xlarge | 10000 |
CodeLlama-7b-Instruct | meta-textgeneration-llama-codellama-7b-instruct | ml.g5.2xlarge | 10000 |
CodeLlama-7b-Python | meta-textgeneration-llama-codellama-7b-python | ml.g5.2xlarge | 10000 |
CodeLlama-13b | meta-textgeneration-llama-codellama-13b | ml.g5.12xlarge | 32000 |
CodeLlama-13b-Instruct | meta-textgeneration-llama-codellama-13b-instruct | ml.g5.12xlarge | 32000 |
CodeLlama-13b-Python | meta-textgeneration-llama-codellama-13b-python | ml.g5.12xlarge | 32000 |
CodeLlama-34b | meta-textgeneration-llama-codellama-34b | ml.g5.48xlarge | 48000 |
CodeLlama-34b-Instruct | meta-textgeneration-llama-codellama-34b-instruct | ml.g5.48xlarge | 48000 |
CodeLlama-34b-Python | meta-textgeneration-llama-codellama-34b-python | ml.g5.48xlarge | 48000 |
Хотя модели Code Llama были обучены на длине контекста в 16 000 токенов, они продемонстрировали хорошую производительность даже на бóльших контекстных окнах. Столбец “Максимальное количество поддерживаемых токенов” в предыдущей таблице представляет собой верхний предел для поддерживаемого контекстного окна на экземпляре по умолчанию. Поскольку модель Code Llama 7B может поддерживать только 10 000 токенов на экземпляре ml.g5.2xlarge, мы рекомендуем развернуть модель версии 13B или 34B, если требуется более крупные контексты для вашего приложения.
По умолчанию все модели работают для задач генерации кода. Основные и инструктирующие модели обе реагируют на задачи заполнения, хотя основная модель имеет лучшее качество вывода для большинства примеров запросов. Наконец, только инструктирующие модели работают с инструкциями. Следующая таблица иллюстрирует, какие модели продемонстрировали хорошую производительность (Хорошо) и умеренную производительность (Умеренно) на примерах запросов в демонстрационных блокнотах.
. | Генерация кода | Заполнение кода | Инструкции по коду |
CodeLlama-7b | Хорошо | Хорошо | N/A |
CodeLlama-7b-Instruct | Хорошо | Умеренно | Хорошо |
CodeLlama-7b-Python | Хорошо | N/A | N/A |
CodeLlama-13b | Хорошо | Хорошо | N/A |
CodeLlama-13b-Instruct | Хорошо | Умеренно | Хорошо |
CodeLlama-13b-Python | Хорошо | N/A | N/A |
CodeLlama-34b | Хорошо | N/A | N/A |
CodeLlama-34b-Instruct | Хорошо | N/A | Хорошо |
CodeLlama-34b-Python | Хорошо | N/A | N/A |
Генерация кода
Следующие примеры были запущены на модели CodeLlama-34b-Instruct с параметрами нагрузки "parameters": {"max_new_tokens": 256, "temperature": 0.2, "top_p": 0.9}
:
Вводimport socketdef ping_exponential_backoff(host: str):Вывод """ Пинг хоста с использованием экспоненциальной задержки. """ for i in range(1, 10): try: socket.gethostbyname(host) return True except socket.gaierror: time.sleep(2 ** i) return FalseВводimport argparsedef main(string: str): print(string) print(string[::-1])if __name__ == "__main__":Вывод parser = argparse.ArgumentParser() parser.add_argument("string", help="Строка для печати") args = parser.parse_args() main(args.string)
Заполнение кода
Заполнение кода включает возвращение сгенерированного кода с учетом окружающего контекста. Это отличается от задачи генерации кода, потому что, помимо префиксного сегмента кода, модель также получает суффиксный сегмент кода. Особые токены использовались во время настройки модели для обозначения начала префикса (<PRE>
), начала суффикса (<SUF>
) и начала среднего (<MID>
). Входные последовательности для модели должны быть в одном из следующих форматов:
- префикс-суффикс-середина –
<PRE> {префикс} <SUF>{суффикс} <MID>
- суффикс-префикс-середина –
<PRE> <SUF>{суффикс} <MID> {префикс}
В следующих примерах используется формат префикс-суффикс-середина для модели CodeLlama-7b с параметрами нагрузки {"max_new_tokens": 256, "temperature": 0.05, "top_p": 0.9}
:
Input<PRE> def remove_non_ascii(s: str) -> str: """ <SUF> return result <MID>Output Удалить не-ASCII символы из строки. :param s: Строка, из которой нужно удалить не-ASCII символы. :return: Строка без не-ASCII символов. """ result = "" for c in s: if ord(c) < 128: result += cInput# Инструкции по установке: ```bash<FILL> ```Это загружает код LLaMA для вывода и устанавливает репозиторий в качестве локального пакета pip.Output git clone https://github.com/LLaMA-AI/LLaMA-inference.git cd LLaMA-inference pip install -e .Inputclass FactoryManagerInterface(AbstractManagerFactory): def __init__(<FILL>def main(): factory = FactoryManagerInterface(start=datetime.now()) managers = [] for i in range(10): managers.append(factory.build(id=i))Outputself, start=None): self.start = start def build(self, id): return FactoryManager(id, self.start)Input/-- Квази-префунктоид является 1-связным, если все его этализации 1-связны. -/lemma connected_iff_etalisation [C D : precategories] (P : quasi_prefunctoid C D) : π₁ P = 0 ↔ <FILL> = 0 :=begin split, { intros h f, rw pi_1_etalisation at h, simp [h], refl }, { intro h, have := @quasi_adjoint C D P, simp [←pi_1_etalisation, this, h], refl }endOutput∀ f : C ⟶ D, π₁ (P.etalise f)
Инструкции по коду
Meta также предоставляет сбалансированную инструкцию для модели Code Llama. Примеры запросов в этом разделе могут быть применены только к этим моделям сбалансированных инструкций Code Llama, которые являются моделями с суффиксом instruct в идентификаторе модели. Формат Code Llama для инструкций такой же, как формат подсказки Llama-2-chat, о котором мы подробно рассказываем в Llama 2 foundation модели теперь доступны в SageMaker JumpStart
Простой запрос пользователя может выглядеть следующим образом:
<s>[INST] {пользовательский запрос} [/INST]
Вы также можете добавить системную подсказку следующим синтаксисом:
<s>[INST] <<SYS>>{системная подсказка}<</SYS>>{пользовательский запрос} [/INST]
Наконец, вы можете иметь разговорное взаимодействие с моделью, включив все предыдущие запросы пользователя и ответы помощника во входных данных:
<s>[INST] <<SYS>>{системная подсказка}<</SYS>>{пользовательский запрос_1} [/INST] {ответ_помощника_1} </s><s>[INST] {пользовательский запрос_1} [/INST]
Эти примеры были запущены на модели CodeLlama-13b-Instruct с параметрами нагрузки “parameters”: {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}
:
Input<s>[INST] В Bash, как перечислить все текстовые файлы в текущем каталоге (исключая подкаталоги), которые были изменены в последний месяц? [/INST] Output Вы можете использовать команду `find` в Bash для перечисления всех текстовых файлов в текущем каталоге (исключая подкаталоги), которые были изменены в последний месяц. Вот пример команды:```find . -type f -name "*.txt" -mtime -30```Приведу разбор команды:* `find .`: Это указывает `find` искать в текущем каталоге и всех его подкаталогах.* `-type f`: Это указывает `find` искать только файлы (а не каталоги).* `-name "*.txt"`: Это указывает `find` искать только файлы с расширением `.txt`.* `-mtime -30`: Это указывает `find` искать только файлы, которые были изменены в последние 30 дней (2,592,000 секунд).Результатом команды будет список всех текстовых файлов в текущем каталоге (исключая подкаталоги), которые были изменены в последний месяц.Input<s>[INST] В чем разница между inorder и preorder обходом? Приведите пример на Python. [/INST] Output Inorder и preorder обходы - это два разных способа обхода бинарного дерева.Inorder обход является способом посещения узлов бинарного дерева в определенном порядке. В inorder обходе сначала посещается левое поддерево, затем текущий узел, и, наконец, посещается правое поддерево. Это означает, что узлы посещаются слева направо, сверху вниз.Preorder обход, с другой стороны, является способом посещения узлов бинарного дерева в другом порядке. В preorder обходе сначала посещается текущий узел, затем левое поддерево, и, наконец, правое поддерево. Это означает, что узлы посещаются сверху вниз, слева направо.Вот пример inorder обхода бинарного дерева на Python:```def inorder_traversal(root): if root is None: return [] return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)```А вот пример preorder обхода бинарного дерева на Python:```def preorder_traversal(root): if root is None: return [] return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)```В этом примере функция `inorder_traversal` возвращает список значений в дереве в порядке ключей, от наименьшего к наибольшему. Функция `preorder_traversal` возвращает список значений в дереве в порядке ключей, но сначала посещается текущий узел, а затем его потомки.Input<s>[INST] <<SYS>>Предоставьте ответы на JavaScript, <</SYS>>Напишите функцию, которая вычисляет множество сумм всех непрерывных подсписков заданного списка. [/INST] Output function contiguousSublistSums(list) { let sums = []; for (let i = 0; i < list.length; i++) { let sum = 0; for (let j = i; j < list.length; j++) { sum += list[j]; sums.push(sum); } } return sums;}console.log(contiguousSublistSums([1, 2, 3, 4, 5])); // [1, 3, 6, 10, 15]console.log(contiguousSublistSums([1, 2, 3, 4, 5, 6])); // [1, 3, 6, 10, 15, 21]Очистка
После того, как вы завершили работу с блокнотом, убедитесь, что вы удалили все созданные ресурсы, чтобы остановить выставление счетов. Используйте следующий код:
predictor.delete_model()predictor.delete_endpoint()
Заключение
В этой статье мы показали вам, как начать работу с моделями Code Llama в SageMaker Studio и развернуть модель для генерации кода и естественного языка о коде из обоих кодовых и естественноязыковых подсказок. Поскольку базовые модели предварительно обучены, они могут помочь снизить затраты на обучение и инфраструктуру и позволить настройку для вашего случая использования. Посетите SageMaker JumpStart в SageMaker Studio прямо сейчас, чтобы начать работу.
Ресурсы