Papel | ? Colección HuggingFace | Página de debates
Presentamos la serie Granite de modelos de código exclusivos para decodificadores para tareas de generación de código (p. ej., corregir errores, explicar código, documentar código), entrenados con código escrito en 116 lenguajes de programación. Una evaluación exhaustiva de la familia de modelos Granite Code en diversas tareas demuestra que nuestros modelos alcanzan consistentemente un rendimiento de vanguardia entre los LLM de código abierto disponibles.
Las ventajas clave de los modelos Granite Code incluyen:
La familia de modelos Granite Code se presenta en dos variantes principales:
Tanto el modelo base como el de instrucción están disponibles en tamaños de parámetros 3B, 8B, 20B y 34B.
Nuestro proceso para preparar datos de preentrenamiento de código implica varias etapas. Primero, recopilamos una combinación de conjuntos de datos disponibles públicamente (por ejemplo, GitHub Code Clean, datos de Starcoder), repositorios de códigos públicos y problemas de GitHub. En segundo lugar, filtramos los datos del código recopilados según el lenguaje de programación en el que están escritos los datos (que determinamos según la extensión del archivo). Luego, también filtramos los datos con código de baja calidad. En tercer lugar, adoptamos una estrategia de deduplicación agresiva que incluye deduplicación exacta y difusa para eliminar documentos que tienen un contenido de código (casi) idéntico. Finalmente, aplicamos un filtro de contenido HAP que reduce la probabilidad de que los modelos generen lenguaje de odio, abusivo o profano. También nos aseguramos de redactar la información de identificación personal (PII) reemplazando el contenido de la PII (por ejemplo, nombres, direcciones de correo electrónico, claves, contraseñas) con los tokens correspondientes (por ejemplo, ⟨NOMBRE⟩, ⟨EMAIL⟩, ⟨KEY⟩, ⟨PASSWORD⟩) . También escaneamos todos los conjuntos de datos utilizando ClamAV para identificar y eliminar instancias de malware en el código fuente. Además de recopilar datos de código para el entrenamiento de modelos, seleccionamos varios conjuntos de datos de lenguaje natural de alta calidad disponibles públicamente para mejorar la competencia del modelo en la comprensión del lenguaje y el razonamiento matemático.
Los modelos Granite Code Base se entrenan en tokens de 3-4T de datos de código y conjuntos de datos de lenguaje natural relacionados con el código. Los datos se tokenizan mediante codificación de pares de bytes (BPE), empleando el mismo tokenizador que StarCoder. Utilizamos datos de alta calidad con dos fases de capacitación de la siguiente manera:
Los modelos de Granite Code Instruct están ajustados en los siguientes tipos de datos de instrucción: 1) confirmaciones de código provenientes de CommitPackFT, 2) conjuntos de datos matemáticos de alta calidad, específicamente utilizamos MathInstruct y MetaMathQA, 3) conjuntos de datos de instrucciones de código como Glaive-Code-Assistant- v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 y una pequeña colección de conjuntos de datos de llamadas API sintéticas, y 4) conjuntos de datos de instrucción de idiomas de alta calidad, como HelpSteer y una versión de Platypus con licencia abierta y filtrada. .
Llevamos a cabo una evaluación exhaustiva de nuestros modelos de código en una lista completa de puntos de referencia que incluye, entre otros, HumanEvalPack, MBPP y MBPP+. Este conjunto de puntos de referencia abarca diferentes tareas de codificación en lenguajes de programación de uso común (por ejemplo, Python, JavaScript, Java, Go, C++, Rust).
Nuestros hallazgos revelan que los modelos Granite Code superan a los modelos sólidos de código abierto en todos los tamaños. La siguiente figura ilustra cómo Granite-8B-Code-Base
supera Mistral-7B
, LLama-3-8B
y otros modelos de código abierto en tres tareas de codificación. Proporcionamos más resultados de evaluación en nuestro artículo.
Para utilizar cualquiera de nuestros modelos, elija un model_path
apropiado de:
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 )
Usamos Dolomite Engine para realizar ajustes finos (o ajustes de instrucciones) en todos nuestros modelos. Proporcionamos scripts de muestra para ajustar ibm-granite/granite-3b-code-base
. Para ajustar los modelos, simplemente siga estos pasos:
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
Consejo
Si desea utilizar transformadores sin relleno para ahorrar memoria y FLOP durante el entrenamiento, siga las instrucciones en el archivo README de Dolomite Engine para obtener más detalles.
Por favor consulte nuestras Directrices y Código de Conducta para contribuir a nuestro proyecto.
Las tarjetas de modelo para cada variante de modelo están disponibles en su respectivo repositorio de HuggingFace. Visite nuestra colección aquí.
El modelo elegido (granite-3b-code-base en este ejemplo) se puede clonar usando:
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
Todos los modelos de Granite Code se distribuyen bajo la licencia Apache 2.0.
Háganos saber sus comentarios sobre nuestra familia de modelos de código visitando nuestra colección. Seleccione el repositorio del modelo sobre el que le gustaría enviar comentarios. Luego, vaya a la pestaña Comunidad y haga clic en Nueva discusión . Alternativamente, también puede publicar cualquier pregunta/comentario en nuestra página de discusiones de github.