Home Машинное обучение Модели генерации кода Code Llama из Meta теперь доступны через Amazon SageMaker JumpStart. | DeepTech

Модели генерации кода Code Llama из Meta теперь доступны через Amazon SageMaker JumpStart. | DeepTech

0
Модели генерации кода Code Llama из Meta теперь доступны через Amazon SageMaker JumpStart.
 | DeepTech

Сегодня мы рады сообщить, что базовые модели Code Llama, разработанные Meta, доступны клиентам через Amazon SageMaker JumpStart для развертывания одним щелчком мыши и выполнения вывода. Code Llama — это современная модель большого языка (LLM), способная генерировать код и естественный язык кода как из кода, так и из подсказок на естественном языке. Code Llama бесплатен для исследовательского и коммерческого использования. Вы можете опробовать эту модель с помощью SageMaker JumpStart, центра машинного обучения (ML), который предоставляет доступ к алгоритмам, моделям и решениям ML, чтобы вы могли быстро приступить к работе с ML. В этом посте мы расскажем, как обнаружить и развернуть модель Code Llama с помощью SageMaker JumpStart.

Что такое Код Лама

Code Llama — модель, выпущенная компанией Мета Он построен на базе 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.

Что такое 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 доступны для обнаружения и могут быть развернуты в регионах Востока США (Северная Вирджиния), Запада США (Орегон) и Европы (Ирландия).

Клиенты должны принять лицензионное соглашение для развертывания SDK SageMaker Model Visa.

Откройте для себя модели

Доступ к базовым моделям 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 вы можете найти в Базовые модели: генерация текста карусель.

Вы также можете найти другие варианты модели, выбрав Изучите все модели генерации текста или ищите Код Ламы.

Вы можете выбрать карточку модели, чтобы просмотреть сведения о модели, такие как лицензия, данные, используемые для обучения, и способы использования. Вы также найдете две кнопки, Развертывать и Открыть блокноткоторый поможет вам использовать модель.

Развертывать

Когда вы выбираете Развертывать и подтвердите условия, начнется развертывание. Альтернативно вы можете выполнить развертывание с помощью примера записной книжки, выбрав Открыть блокнот. Пример записной книжки, в которой представлены комплексные инструкции по развертыванию модели для вывода и очистки ресурсов.

Чтобы развернуть с помощью блокнота, мы начинаем с выбора соответствующей модели, указанной в model_id. Вы можете развернуть любую из выбранных моделей в SageMaker с помощью следующего кода:

from sagemaker.jumpstart.model import JumpStartModel

model = JumpStartModel(model_id="meta-textgeneration-llama-codellama-7b")
predictor = model.deploy()

При этом модель развертывается в SageMaker с конфигурациями по умолчанию, включая тип экземпляра по умолчанию и конфигурации VPC по умолчанию. Вы можете изменить эти конфигурации, указав значения, отличные от значений по умолчанию, в JumpStartМодель. После развертывания вы можете выполнить логический вывод для развернутой конечной точки с помощью предиктора SageMaker:

payload = {
   "inputs": "<s>(INST) How do I deploy a model on 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, а также идентификаторы моделей, типы экземпляров по умолчанию и максимальное поддерживаемое количество токенов (сумма количества входных токенов и количества сгенерированных токенов для всех одновременных запросов), поддерживаемых для каждого из эти модели.

Название модели Идентификатор модели Тип экземпляра по умолчанию Максимальное количество поддерживаемых токенов
КодLlama-7b мета-текстгенерация-лама-коделлама-7b мл.г5.2xбольшой 10000
КодLlama-7b-Instruct мета-текстгенерация-лама-коделлама-7b-инструкт мл.г5.2xбольшой 10000
КодLlama-7b-Python метатекстгенерация-лама-коделлама-7b-python мл.г5.2xбольшой 10000
КодLlama-13b мета-текстгенерация-лама-коделлама-13b мл.г5.12xбольшой 32000
КодLlama-13b-Instruct метатекстгенерация-лама-коделлама-13b-инструкт мл.г5.12xбольшой 32000
КодLlama-13b-Python метатекстгенерация-лама-коделлама-13b-python мл.г5.12xбольшой 32000
КодLlama-34b мета-текстгенерация-лама-коделлама-34b мл.г5.48xбольшой 48000
КодLlama-34b-Инструкция метатекстгенерация-лама-коделлама-34b-инструкт мл.г5.48xбольшой 48000
КодLlama-34b-Python метатекстгенерация-лама-коделлама-34b-python мл.г5.48xбольшой 48000

Хотя модели Code Llama были обучены на контексте длиной 16 000 токенов, модели показали хорошую производительность даже в больших контекстных окнах. Столбец максимального количества поддерживаемых токенов в предыдущей таблице — это верхний предел поддерживаемого контекстного окна для типа экземпляра по умолчанию. Поскольку модель Code Llama 7B может поддерживать только 10 000 токенов в экземпляре ml.g5.2xlarge, мы рекомендуем развернуть версию модели 13B или 34B, если для вашего приложения требуются более крупные контексты.

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

. Генерация кода Заполнение кода Инструкции по коду
КодLlama-7b Хороший Хороший Н/Д
КодLlama-7b-Instruct Хороший Умеренный Хороший
КодLlama-7b-Python Хороший Н/Д Н/Д
КодLlama-13b Хороший Хороший Н/Д
КодLlama-13b-Instruct Хороший Умеренный Хороший
КодLlama-13b-Python Хороший Н/Д Н/Д
КодLlama-34b Хороший Н/Д Н/Д
КодLlama-34b-Инструкция Хороший Н/Д Хороший
КодLlama-34b-Python Хороший Н/Д Н/Д

Генерация кода

Следующие примеры были запущены на модели CodeLlama-34b-Instruct с параметрами полезной нагрузки. "parameters": {"max_new_tokens": 256, "temperature": 0.2, "top_p": 0.9}:

Input
import socket

def ping_exponential_backoff(host: str):


Output
    """
    Ping a host using exponential backoff.
    """
    for i in range(1, 10):
        try:
            socket.gethostbyname(host)
            return True
        except socket.gaierror:
            time.sleep(2 ** i)
    return False

Input
import argparse

def main(string: str):
    print(string)
    print(string(::-1))

if __name__ == "__main__":


Output
    parser = argparse.ArgumentParser()
    parser.add_argument("string", help="String to be printed")
    args = parser.parse_args()
    main(args.string)

Наполнение кода

Заполнение кода предполагает возврат сгенерированного кода с учетом окружающего контекста. Это отличается от задачи генерации кода, поскольку в дополнение к префиксному сегменту кода модель также снабжена суффиксом кодового сегмента. При тонкой настройке использовались специальные токены для обозначения начала префикса (<PRE>), начало суффикса (<SUF>), и начало середины (<MID>). Входные последовательности в модель должны быть в одном из следующих форматов:

  • префикс-суффикс-средний <PRE> {prefix} <SUF>{suffix} <MID>
  • суффикс-префикс-средний<PRE> <SUF>{suffix} <MID> {prefix}

В следующих примерах используется формат префикс-суффикс-средний в модели CodeLlama-7b с полезной нагрузкой. parameters {"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
    Remove non-ASCII characters from a string.

    :param s: The string to remove non-ASCII characters from.
    :return: The string with non-ASCII characters removed.
    """
    result = ""
    for c in s:
        if ord(c) < 128:
            result += c

Input
# Installation instructions:
    ```bash
<FILL>
    ```
This downloads the LLaMA inference code and installs the repository as a local pip package.


Output
    git clone https://github.com/LLaMA-AI/LLaMA-inference.git
    cd LLaMA-inference
    pip install -e .

Input
class InterfaceManagerFactory(AbstractManagerFactory):
    def __init__(<FILL>
def main():
    factory = InterfaceManagerFactory(start=datetime.now())
    managers = ()
    for i in range(10):
        managers.append(factory.build(id=i))


Output
self, start=None):
        self.start = start

    def build(self, id):
        return InterfaceManager(id, self.start)

Input
/-- A quasi-prefunctoid is 1-connected iff all its etalisations are 1-connected. -/
theorem connected_iff_etalisation (C D : precategoroid) (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
  }
end


Output
∀ f : C ⟶ D, π₁ (P.etalise f)

Инструкции по коду

Meta также предоставила настроенный на инструкции вариант Code Llama. Примеры запросов в этом разделе можно применять только к этим настроенным на инструкции моделям Code Llama, которые представляют собой модели с суффиксом инструкций идентификатора модели. Формат инструкций Code Llama аналогичен формату подсказок чата Llama-2, который мы подробно описали в модели фундамента Llama 2, которая теперь доступна в SageMaker JumpStart.

Простое приглашение пользователя может выглядеть следующим образом:

<s>(INST) {user_prompt} (/INST)

Вы также можете добавить системное приглашение со следующим синтаксисом:

<s>(INST) <<SYS>>
{system_prompt}
<</SYS>>

{user_prompt} (/INST)

Наконец, вы можете взаимодействовать с моделью в диалоговом режиме, включив во входные данные все предыдущие запросы пользователя и ответы помощника:

<s>(INST) <<SYS>>
{system_prompt}
<</SYS>>

{user_prompt_1} (/INST) {assistant_response_1} </s><s>(INST) {user_prompt_1} (/INST)

Эти примеры были запущены на модели CodeLlama-13b-Instruct с «параметрами» параметров полезной нагрузки: {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}:

Input
<s>(INST) In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month? (/INST) 

Output
 You can use the `find` command in Bash to list all text files in the current directory (excluding subdirectories) that have been modified in the last month. Here's an example command:
```
find . -type f -name "*.txt" -mtime -30
```
Here's a breakdown of the command:

* `find .`: This tells `find` to search the current directory and all its subdirectories.
* `-type f`: This tells `find` to only search for files (not directories).
* `-name "*.txt"`: This tells `find` to only search for files with the `.txt` extension.
* `-mtime -30`: This tells `find` to only search for files that have been modified in the last 30 days (2,592,000 seconds).

The output of the command will be a list of all text files in the current directory (excluding subdirectories) that have been modified in the last month.

Input
<s>(INST) What is the difference between inorder and preorder traversal? Give an example in Python. (/INST) 

Output
 Inorder and preorder traversal are two different ways of traversing a binary tree.

Inorder traversal is a way of visiting the nodes of a binary tree in a specific order. In an inorder traversal, the left subtree is visited first, then the current node, and finally the right subtree is visited. This means that the nodes are visited in a left-to-right, top-to-bottom order.

Preorder traversal, on the other hand, is a way of visiting the nodes of a binary tree in a different order. In a preorder traversal, the current node is visited first, followed by the left subtree, and finally the right subtree. This means that the nodes are visited in a top-down, left-to-right order.

Here is an example of an inorder traversal of a binary tree in Python:
```
def inorder_traversal(root):
    if root is None:
        return ()
    return inorder_traversal(root.left) + (root.val) + inorder_traversal(root.right)
```
And here is an example of a preorder traversal of a binary tree in Python:
```
def preorder_traversal(root):
    if root is None:
        return ()
    return (root.val) + preorder_traversal(root.left) + preorder_traversal(root.right)
```
In this example, the `inorder_traversal` function returns a list of the values in the tree in the order of the keys, from smallest to largest. The `preorder_traversal` function returns a list of the values in the tree in the order of the keys, but with the current node visited before its children.

Input
<s>(INST) <<SYS>>
Provide answers in JavaScript
<</SYS>>

Write a function that computes the set of sums of all contiguous sublists of a given list. (/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)
console.log(contiguousSublistSums((1, 2, 3, 4, 5, 6, 7))); // (1, 3, 6, 10, 15, 21, 28)
console.log(contiguousSublistSums((1, 2, 3, 4, 5, 6, 7, 8))); // (1, 3, 6, 10, 15, 21, 28, 36)
console.log(contiguousSublistSums((1, 2, 3, 4, 5, 6, 7, 8, 9))); // (1, 3, 6, 10, 15, 21, 28, 36, 45)

Очистить

После завершения работы с блокнотом обязательно удалите все ресурсы, созданные в процессе, чтобы прекратить выставление счетов. Используйте следующий код:

predictor.delete_model()
predictor.delete_endpoint()

Заключение

В этом посте мы показали вам, как начать работу с моделями Code Llama в SageMaker Studio и развернуть модель для генерации кода и естественного языка о коде как из кода, так и из подсказок на естественном языке. Поскольку базовые модели предварительно обучены, они могут помочь снизить затраты на обучение и инфраструктуру, а также обеспечить настройку для вашего варианта использования. Посетите SageMaker JumpStart в SageMaker Studio прямо сейчас, чтобы начать работу.

Ресурсы


Об авторах


Габриэль Синнев
является директором по исследованиям в команде Facebook AI Research (FAIR) в компании Meta. До работы в Мете Габриэль работал научным сотрудником в команде Эммануэля Дюпу в Высшей нормальной школе в Париже, занимаясь реверс-инжинирингом процесса овладения речью младенцев. Габриэль получил докторскую степень в области байесовского моделирования применительно к искусственному интеллекту в стратегических играх в реальном времени в Университете Гренобля.

Эйсса Джамиль — партнер-инженер отдела генеративного искусственного интеллекта в Meta.

Доктор Кайл Ульрих — учёный-прикладник в команде Amazon SageMaker JumpStart. Его исследовательские интересы включают масштабируемые алгоритмы машинного обучения, компьютерное зрение, временные ряды, байесовские непараметрические методы и гауссовские процессы. Его докторская степень получена в Университете Дьюка, и он опубликовал статьи в журналах NeurIPS, Cell и Neuron.

Доктор Ашиш Хетан является старшим научным сотрудником Amazon SageMaker JumpStart и помогает разрабатывать алгоритмы машинного обучения. Он получил докторскую степень в Университете Иллинойса Урбана-Шампейн. Он является активным исследователем в области машинного обучения и статистического вывода и опубликовал множество статей на конференциях NeurIPS, ICML, ICLR, JMLR, ACL и EMNLP.

Вивек Сингх — менеджер по продукту в SageMaker JumpStart. Он стремится предоставить клиентам возможность использовать SageMaker JumpStart, чтобы упростить и ускорить процесс машинного обучения для создания приложений генеративного искусственного интеллекта.

LEAVE A REPLY

Please enter your comment!
Please enter your name here