Бумага | ? Коллекция HuggingFace | Страница обсуждений
Мы представляем серию моделей кода Granite, предназначенных только для декодирования, для задач генерации кода (например, исправление ошибок, объяснение кода, документирование кода), обученных с помощью кода, написанного на 116 языках программирования. Всесторонняя оценка семейства моделей Granite Code для выполнения различных задач показывает, что наши модели неизменно достигают самых современных показателей производительности среди доступных LLM с открытым исходным кодом.
К ключевым преимуществам моделей Granite Code относятся:
Семейство моделей Granite Code представлено в двух основных вариантах:
Как базовая, так и инструктирующая модели доступны с размерами параметров 3B, 8B, 20B и 34B.
Наш процесс подготовки данных для предварительного обучения кода включает в себя несколько этапов. Сначала мы собираем комбинацию общедоступных наборов данных (например, GitHub Code Clean, данные Starcoder), общедоступных репозиториев кода и проблем с GitHub. Во-вторых, мы фильтруем собранные данные кода на основе языка программирования, на котором написаны данные (который мы определили на основе расширения файла). Затем мы также отфильтровываем данные с низким качеством кода. В-третьих, мы применяем агрессивную стратегию дедупликации, которая включает как точную, так и нечеткую дедупликацию для удаления документов, имеющих (почти) идентичное содержимое кода. Наконец, мы применяем фильтр контента HAP, который снижает вероятность того, что модели будут генерировать ненавистнические, оскорбительные или ненормативную лексику. Мы также обязательно редактируем личную информацию (PII), заменяя содержимое PII (например, имена, адреса электронной почты, ключи, пароли) соответствующими токенами (например, ⟨ИМЯ⟩, ⟨EMAIL⟩, ⟨КЛЮЧ⟩, ⟨ПАРОЛЬ⟩). . Мы также сканируем все наборы данных с помощью ClamAV, чтобы выявить и удалить экземпляры вредоносного ПО в исходном коде. Помимо сбора данных кода для обучения модели, мы курируем несколько общедоступных высококачественных наборов данных на естественном языке для улучшения навыков модели в понимании языка и математических рассуждениях.
Модели Granite Code Base обучаются на токенах 3–4T кодовых данных и наборах данных естественного языка, связанных с кодом. Данные токенизируются посредством кодирования пар байтов (BPE) с использованием того же токенизатора, что и StarCoder. Мы используем высококачественные данные с двумя этапами обучения следующим образом:
Модели инструкций Granite Code точно настроены на следующие типы данных инструкций: 1) фиксации кода, полученные из CommitPackFT, 2) высококачественные наборы математических данных, в частности, мы использовали MathInstruct и MetaMathQA, 3) наборы данных инструкций кода, такие как Glaive-Code-Assistant- v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 и небольшая коллекция синтетических наборов данных вызовов API, а также 4) высококачественные наборы данных языковых инструкций, такие как HelpSteer и открытая версия Platypus с фильтрацией лицензий. .
Мы проводим обширную оценку наших моделей кода с использованием полного списка тестов, который включает, помимо прочего, HumanEvalPack, MBPP и MBPP+. Этот набор тестов охватывает различные задачи кодирования на широко используемых языках программирования (например, Python, JavaScript, Java, Go, C++, Rust).
Наши результаты показывают, что модели Granite Code превосходят надежные модели с открытым исходным кодом независимо от размера модели. На рисунке ниже показано, как Granite-8B-Code-Base
превосходит Mistral-7B
, LLama-3-8B
и другие модели с открытым исходным кодом в трех задачах кодирования. Дальнейшие результаты оценки мы приводим в нашей статье.
Чтобы использовать любую из наших моделей, выберите соответствующий model_path
из:
ibm-granite/granite-3b-code-base-2k
ibm-granite/granite-3b-code-instruct-2k
ibm-granite/granite-8b-code-base-4k
ibm-granite/granite-8b-code-instruct-4k
ibm-granite/granite-20b-code-base-8k
ibm-granite/granite-20b-code-instruct-8k
ibm-granite/granite-34b-code-base-8k
ibm-granite/granite-34b-code-instruct-8k
from transformers import AutoModelForCausalLM , AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm-granite/granite-3b-code-base-2k" # pick anyone from above list
tokenizer = AutoTokenizer . from_pretrained ( model_path )
# drop device_map if running on CPU
model = AutoModelForCausalLM . from_pretrained ( model_path , device_map = device )
model . eval ()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer ( input_text , return_tensors = "pt" )
# transfer tokenized inputs to the device
for i in input_tokens :
input_tokens [ i ] = input_tokens [ i ]. to ( device )
# generate output tokens
output = model . generate ( ** input_tokens )
# decode output tokens into text
output = tokenizer . batch_decode ( output )
# loop over the batch to print, in this example the batch size is 1
for i in output :
print ( i )
Мы используем Dolomite Engine для точной настройки (или настройки инструкций) всех наших моделей. Мы предоставляем примеры сценариев для тонкой настройки ibm-granite/granite-3b-code-base
. Для точной настройки моделей просто выполните следующие действия:
git clone https://github.com/IBM/dolomite-engine/
cd dolomite-engine
# you might need to modify configs/granite-example/training.yml
sh scripts/finetune.sh configs/granite-example/training.yml
# once the model is trained, convert to HuggingFace-compatible safetensors
sh scripts/export.sh configs/granite-example/export.yml
Кончик
Если вы хотите использовать преобразователи без заполнения для экономии объема памяти и количества FLOP во время обучения, следуйте инструкциям в README Dolomite Engine для получения более подробной информации.
Пожалуйста, ознакомьтесь с нашими Правилами и Кодексом поведения, чтобы внести свой вклад в наш проект.
Карты моделей для каждого варианта модели доступны в соответствующем репозитории HuggingFace. Пожалуйста, посетите нашу коллекцию здесь.
Выбранную модель (в данном примере база кода Granite-3b) можно клонировать с помощью:
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
Все модели Granite Code распространяются по лицензии Apache 2.0.
Пожалуйста, сообщите нам свои комментарии о нашем семействе моделей кода, посетив нашу коллекцию. Выберите репозиторий модели, о которой вы хотите оставить отзыв. Затем перейдите на вкладку «Сообщество» и нажмите «Новое обсуждение» . Кроме того, вы также можете оставить любые вопросы/комментарии на нашей странице обсуждений GitHub.