Посмотреть на 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:
- В правом верхнем углу окна Colab выберите ▾ ( Дополнительные параметры подключения ).
- Выберите Изменить тип среды выполнения .
- В разделе «Аппаратный ускоритель» выберите 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.