Keras CodeGemma Краткое руководство

Посмотреть на ai.google.dev Запустить в Google Colab Посмотреть исходный код на GitHub

CodeGemma — это семейство легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini.

Модели CodeGemma обучаются на более чем 500 миллиардах токенов, состоящих в основном из кода, с использованием той же архитектуры, что и семейство моделей Gemma. В результате модели CodeGemma обеспечивают современную производительность кода как при выполнении задач завершения, так и при генерации, сохраняя при этом глубокие навыки понимания и рассуждения в масштабе.

CodeGemma имеет 3 варианта:

  • Предварительно обученная модель кода 7B
  • Модель кода 7B, настроенная с помощью инструкций
  • Модель 2B, специально обученная для заполнения кода и открытой генерации.

В этом руководстве вы узнаете, как использовать модель CodeGemma 2B с KerasNLP для задачи завершения кода.

Настраивать

Получите доступ к CodeGemma

Чтобы выполнить это руководство, вам сначала необходимо выполнить инструкции по настройке на странице настройки Gemma . В инструкциях по настройке Gemma показано, как сделать следующее:

  • Получите доступ к Джемме на kaggle.com .
  • Выберите среду выполнения Colab с достаточными ресурсами для запуска модели Gemma 2B.
  • Создайте и настройте имя пользователя Kaggle и ключ API.

После завершения настройки Gemma перейдите к следующему разделу, где вы установите переменные среды для вашей среды Colab.

Выберите время выполнения

Для выполнения этого руководства вам потребуется среда выполнения Colab с достаточными ресурсами для запуска модели CodeGemma 2B. В этом случае вы можете использовать графический процессор T4:

  1. В правом верхнем углу окна Colab выберите ▾ ( Дополнительные параметры подключения ).
  2. Выберите Изменить тип среды выполнения .
  3. В разделе «Аппаратный ускоритель» выберите T4 GPU .

Настройте свой ключ API

Чтобы использовать Gemma, вы должны предоставить свое имя пользователя Kaggle и ключ API Kaggle.

Чтобы сгенерировать ключ API Kaggle, перейдите на вкладку «Учетная запись» вашего профиля пользователя Kaggle и выберите « Создать новый токен» . Это приведет к загрузке файла kaggle.json , содержащего ваши учетные данные API.

В Colab выберите «Секреты» (🔑) на левой панели и добавьте свое имя пользователя Kaggle и ключ API Kaggle. Сохраните свое имя пользователя под именем KAGGLE_USERNAME и свой ключ API под именем KAGGLE_KEY .

Установить переменные среды

Установите переменные среды для KAGGLE_USERNAME и KAGGLE_KEY .

import os
from google.colab import userdata

os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

Установить зависимости

pip install -q -U keras-nlp

Выберите серверную часть

Keras — это высокоуровневый многоплатформенный API глубокого обучения, разработанный для простоты и удобства использования. Используя Keras 3, вы можете запускать рабочие процессы на одном из трех серверов: TensorFlow, JAX или PyTorch.

В этом руководстве настройте бэкэнд для TensorFlow.

os.environ["KERAS_BACKEND"] = "tensorflow"  # Or "jax" or "torch".

Импортировать пакеты

Импортируйте Keras и KerasNLP.

import keras_nlp
import keras

# Run at half precision.
keras.config.set_floatx("bfloat16")

Загрузить модель

KerasNLP предоставляет реализации многих популярных модельных архитектур . В этом руководстве вы создадите модель, используя GemmaCausalLM , комплексную модель Gemma для моделирования причинного языка. Модель причинно-следственного языка прогнозирует следующий токен на основе предыдущих токенов.

Создайте модель, используя метод from_preset :

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("code_gemma_2b_en")
gemma_lm.summary()
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/config.json...
100%|██████████| 554/554 [00:00<00:00, 1.41MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/model.weights.h5...
100%|██████████| 4.67G/4.67G [05:06<00:00, 16.4MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/tokenizer.json...
100%|██████████| 401/401 [00:00<00:00, 382kB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm...
100%|██████████| 4.04M/4.04M [00:01<00:00, 2.41MB/s]

Метод from_preset создает экземпляр модели на основе предустановленной архитектуры и весов. В приведенном выше коде строка code_gemma_2b_en указывает предустановленную архитектуру — модель CodeGemma с 2 миллиардами параметров.

Завершение кода в середине

В этом примере используется возможность CodeGemma «заполнить посередине» (FIM) для завершения кода на основе окружающего контекста. Это особенно полезно в приложениях-редакторах кода для вставки кода, в котором текстовый курсор основан на коде вокруг него (до и после курсора).

CodeGemma позволяет использовать 4 определяемых пользователем токена — 3 для FIM и токен <|file_separator|> для поддержки контекста нескольких файлов. Используйте их для определения констант.

BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"

Определите токены остановки для модели.

END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token

stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)

stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)

Отформатируйте приглашение для завершения кода. Обратите внимание, что:

  • Между токенами FIM, префиксом и суффиксом не должно быть пробелов.
  • Средний токен FIM должен находиться в конце, чтобы модель могла продолжить заполнение.
  • Префикс или суффикс могут быть пустыми в зависимости от того, где в данный момент находится курсор в файле или сколько контекста вы хотите предоставить модели.

Используйте вспомогательную функцию для форматирования приглашения.

def format_completion_prompt(before, after):
    return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"

before = "import "
after = """if __name__ == "__main__":\n    sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)
<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":
    sys.exit(0)<|fim_middle|>

Запустите подсказку. Рекомендуется передавать токены ответа в потоковом режиме. Остановите потоковую передачу при обнаружении любого из определяемых пользователем жетонов или жетонов конца хода/сенетенции, чтобы получить итоговое завершение кода.

gemma_lm.generate(prompt, stop_token_ids=stop_token_ids, max_length=128)
'<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>'

Модель предоставляет sys в качестве предлагаемого завершения кода.

Краткое содержание

В этом руководстве вы познакомитесь с использованием CodeGemma для заполнения кода на основе окружающего контекста. Затем ознакомьтесь с записной книжкой «Программирование с помощью искусственного интеллекта с помощью CodeGemma и KerasNLP», где приведены дополнительные примеры использования CodeGemma.

Также обратитесь к карточке модели CodeGemma для получения технических характеристик моделей CodeGemma.