Ir al contenido principal

Ajuste fino de NVIDIA Nemotron-3-Nano con datos de Q&A de psicología

Aprende a ajustar NVIDIA Nemotron-3-Nano-4B con un dataset de Q&A de psicología en una GPU RTX 3090 usando LoRA y TRL tras descargar el modelo de Hugging Face.
Actualizado 29 abr 2026  · 6 min leer

NVIDIA Nemotron-3 es la nueva familia de modelos abiertos de NVIDIA pensada para razonamiento, programación, chat y flujos de trabajo de IA con agentes. Incluye distintos tamaños de modelo, como Nano, Super y Ultra, para que los desarrolladores elijan entre modelos más pequeños y eficientes o modelos más grandes y de alto rendimiento.

La gran novedad de Nemotron-3 es su enfoque en la eficiencia. Los modelos están diseñados para ofrecer buen rendimiento manteniendo la inferencia y el ajuste fino en un terreno práctico. La versión Nano es especialmente útil para experimentar, ya que puede ejecutarse en configuraciones de GPU más accesibles que los modelos grandes.

En esta guía, vamos a ajustar NVIDIA Nemotron-3-Nano-4B con un conjunto de datos de preguntas y respuestas de psicología. Usaremos Low-Rank Adaptation (LoRA), Transformers Reinforcement Learning (TRL) y Hugging Face para preparar los datos, entrenar el modelo, guardar el adaptador, subirlo a Hugging Face y comparar las respuestas antes y después del ajuste fino.

Para empezar a encontrar los últimos modelos de IA de código abierto, crear agentes de IA y ajustar LLMs, te recomiendo inscribirte en nuestro itinerario de habilidades Hugging Face Fundamentals.

1. Configuración del entorno

Nemotron-3 Nano utiliza una arquitectura híbrida, así que es importante instalar correctamente los paquetes relacionados con Mamba. En un notebook de Jupyter, primero eliminamos la pila de PyTorch existente y reinstalamos la compilación CUDA 12.8 de PyTorch 2.7.1, que es compatible con las versiones fijadas de mamba_ssm y causal_conv1d usadas aquí.

También instalamos las librerías esenciales para el ajuste fino, incluyendo transformers, trl, accelerate, datasets, peft y huggingface_hub.

%%capture
!pip install -U packaging ninja

# Replace the current PyTorch stack with the CUDA 12.8 build that works with these Mamba kernel pins.
!pip uninstall -y torch torchvision torchaudio triton

!pip install "torch==2.7.1" "torchvision==0.22.1" "torchaudio==2.7.1" --index-url https://download.pytorch.org/whl/cu128

!pip install -U "transformers==4.56.2" tokenizers "trl==0.22.2" accelerate datasets peft pandas tqdm huggingface_hub safetensors

!pip install -U --no-build-isolation "mamba_ssm==2.2.5" "causal_conv1d==1.5.2"

Después de instalar los paquetes, comprueba que CUDA está disponible y que PyTorch detecta tu GPU. Este notebook está ajustado para una GPU de 24 GB, por lo que te avisará si tu GPU tiene menos VRAM.

import os
import platform
import torch

print(f"Python: {platform.python_version()}")
print(f"PyTorch: {torch.__version__}")
print(f"PyTorch CUDA build: {torch.version.cuda}")
print(f"CUDA available: {torch.cuda.is_available()}")

if not torch.cuda.is_available():
   raise RuntimeError(
       "CUDA is not available. Select a RunPod PyTorch image with GPU support."
   )

for idx in range(torch.cuda.device_count()):
   props = torch.cuda.get_device_properties(idx)
   total_gb = props.total_memory / 1024**3
   print(
       f"GPU {idx}: {props.name} ({total_gb:.1f} GB VRAM, capability {props.major}.{props.minor})"
   )

if torch.cuda.get_device_properties(0).total_memory < 24 * 1024**3:
   print(
       "Warning: this 4B LoRA notebook is tuned for GPUs with at least 24GB VRAM. Reduce batch sizes on smaller GPUs."
   )

torch.backends.cuda.matmul.allow_tf32 = True
torch.backends.cudnn.allow_tf32 = True

Salida:

Python: 3.12.3
PyTorch: 2.7.1+cu128
PyTorch CUDA build: 12.8
CUDA available: True
GPU 0: NVIDIA GeForce RTX 3090 (23.6 GB VRAM, capability 8.6)
Warning: this 4B LoRA notebook is tuned for GPUs with at least 24GB VRAM. Reduce batch sizes on smaller GPUs.

Configura tu token de Hugging Face como una variable de entorno llamada HF_TOKEN. Esto permitirá que el notebook descargue el modelo Nemotron-3 y, después, suba el adaptador LoRA ajustado a Hugging Face.

from huggingface_hub import login

hf_token = os.environ.get("HF_TOKEN")
if not hf_token:
   raise ValueError(
       "Set HF_TOKEN in the RunPod environment before running this notebook."
   )

login(token=hf_token)
print("Logged in to Hugging Face.")

2. Carga y procesamiento del conjunto de datos

A continuación, cargaremos el conjunto de datos de preguntas y respuestas de psicología desde Hugging Face. El dataset contiene una columna question y dos columnas de respuesta: response_j y response_k. Para esta guía, usaremos response_j como la respuesta objetivo para el ajuste fino supervisado.

Primero cargamos el dataset, lo barajamos para reproducibilidad y creamos las particiones de entrenamiento, validación y prueba.

from datasets import DatasetDict, load_dataset

DATASET_ID = "jkhedri/psychology-dataset"
TRAIN_LIMIT = 8000
VALIDATION_LIMIT = 800
TEST_LIMIT = 300
SEED = 42

raw_dataset = load_dataset(DATASET_ID)
raw_train = raw_dataset["train"].shuffle(seed=SEED)

split_1 = raw_train.train_test_split(test_size=0.15, seed=SEED)
split_2 = split_1["test"].train_test_split(test_size=0.33, seed=SEED)


def maybe_limit(split, limit):
    if limit is None:
        return split
    return split.select(range(min(limit, len(split))))


dataset = DatasetDict(
    {
        "train": maybe_limit(split_1["train"], TRAIN_LIMIT),
        "validation": maybe_limit(split_2["train"], VALIDATION_LIMIT),
        "test": maybe_limit(split_2["test"], TEST_LIMIT),
    }
)

dataset

Salida:

DatasetDict({
    train: Dataset({
        features: ['question', 'response_j', 'response_k'],
        num_rows: 8000
    })
    validation: Dataset({
        features: ['question', 'response_j', 'response_k'],
        num_rows: 800
    })
    test: Dataset({
        features: ['question', 'response_j', 'response_k'],
        num_rows: 300
    })
})

Antes de formatear el dataset para entrenamiento, comprueba los nombres de las columnas y visualiza un ejemplo. Así confirmas que el dataset se cargó correctamente y contiene los campos esperados de pregunta y respuesta.

dataset["train"].column_names, dataset["train"][0]

Salida:

(
    ['question', 'response_j', 'response_k'],
    {
        'question': "I'm experiencing anxiety about social situations and don't know how to cope.",
        'response_j': "Social anxiety can be a difficult and isolating experience, but there are effective treatments available. Let's work on developing coping mechanisms, such as deep breathing and mindfulness, and exposure therapy to gradually confront your fears. We can also explore ways to improve social skills and build self-confidence.",
        'response_k': "Just avoid social situations. It's not worth the anxiety and discomfort. You can also try using alcohol or drugs to help you feel more comfortable in social settings."
    }
)

3. Formateo del dataset para el ajuste fino con TRL

Ahora convertiremos el dataset al formato de prompt-completion que espera TRL. Cada ejemplo incluirá un prompt del sistema, la pregunta de psicología del usuario y la respuesta objetivo del asistente tomada de response_j.

El prompt del sistema indica al modelo cómo responder: con apoyo, sin rastros de razonamiento oculto, con sugerencias prácticas y sin actuar como un profesional sanitario titulado.

SYSTEM_PROMPT = """/no_think
You are a supportive psychology question-answering assistant.
Do not include hidden reasoning, thinking traces, <think> tags, or </think> tags in the final answer.
Respond with empathy, practical coping suggestions, and clear next steps.
Give a complete answer in 2-4 short paragraphs or a brief paragraph plus 3-5 practical bullets.
Do not diagnose the user or claim to replace a licensed mental health professional.
If the user may be in immediate danger or crisis, encourage contacting local emergency services or a trusted crisis hotline.
Keep the answer safe, specific, and directly relevant to the user's question without being overly brief."""

CHAT_TEMPLATE_KWARGS = {"enable_thinking": False}
USER_TEMPLATE = "Question:\n\n{question}"


def clean_text(value):
   return " ".join(str(value).strip().split())


def to_prompt_completion(example):
   question = clean_text(example["question"])
   answer = clean_text(example["response_j"])

   return {
       "prompt": [
           {"role": "system", "content": SYSTEM_PROMPT},
           {"role": "user", "content": USER_TEMPLATE.format(question=question)},
       ],
       "completion": [
           {"role": "assistant", "content": answer},
       ],
       "chat_template_kwargs": CHAT_TEMPLATE_KWARGS,
   }


sft_dataset = dataset.map(
   to_prompt_completion, remove_columns=dataset["train"].column_names
)

sft_dataset["train"][0]

Salida:

{
   'prompt': [
       {
           'role': 'system',
           'content': "/no_think\nYou are a supportive psychology question-answering assistant.\nDo not include hidden reasoning, thinking traces, <think> tags, or </think> tags in the final answer.\nRespond with empathy, practical coping suggestions, and clear next steps.\nGive a complete answer in 2-4 short paragraphs or a brief paragraph plus 3-5 practical bullets.\nDo not diagnose the user or claim to replace a licensed mental health professional.\nIf the user may be in immediate danger or crisis, encourage contacting local emergency services or a trusted crisis hotline.\nKeep the answer safe, specific, and directly relevant to the user's question without being overly brief."
       },
       {
           'role': 'user',
           'content': "Question:\n\nI'm experiencing anxiety about social situations and don't know how to cope."
       }
   ],
   'completion': [
       {
           'role': 'assistant',
           'content': "Social anxiety can be a difficult and isolating experience, but there are effective treatments available. Let's work on developing coping mechanisms, such as deep breathing and mindfulness, and exposure therapy to gradually confront your fears. We can also explore ways to improve social skills and build self-confidence."
       }
   ],
   'chat_template_kwargs': {'enable_thinking': False}
}

4. Carga del modelo base Nemotron-3

A continuación, cargaremos desde Hugging Face el tokenizer y el modelo base NVIDIA Nemotron-3 Nano 4B BF16. También definimos el directorio de salida para el adaptador LoRA y limitamos la longitud de secuencia a 1024 tokens para que el entrenamiento sea manejable en una GPU de 24 GB.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_ID = "nvidia/NVIDIA-Nemotron-3-Nano-4B-BF16"
OUTPUT_DIR = "./nemotron-3-nano-4b-bf16-psychology-qa-lora"
MAX_SEQ_LENGTH = 1024

tokenizer = AutoTokenizer.from_pretrained(
   MODEL_ID,
   token=hf_token,
   trust_remote_code=True,
   use_fast=True,
)

if tokenizer.pad_token is None:
   tokenizer.pad_token = tokenizer.eos_token

tokenizer.padding_side = "right"

base_model = AutoModelForCausalLM.from_pretrained(
   MODEL_ID,
   token=hf_token,
   trust_remote_code=True,
   dtype=torch.bfloat16,
   device_map="auto",
   attn_implementation="eager",
)

base_model.config.use_cache = False
base_model.config.pad_token_id = tokenizer.pad_token_id
base_model.config.eos_token_id = tokenizer.eos_token_id
base_model.generation_config.pad_token_id = tokenizer.pad_token_id
base_model.generation_config.eos_token_id = tokenizer.eos_token_id
base_model.generation_config.use_cache = False
base_model.generation_config.do_sample = False
base_model.generation_config.top_p = None
base_model.generation_config.min_new_tokens = None
base_model.generation_config.repetition_penalty = 1.08
base_model.generation_config.no_repeat_ngram_size = 4

5. Creación de funciones auxiliares de generación

Antes del ajuste fino, crearemos varias funciones auxiliares para probar las respuestas del modelo. Estas funciones construyen el prompt de chat, generan una respuesta, eliminan etiquetas de pensamiento no deseadas y guardan los resultados en una pequeña tabla de comparación.

import gc
import pandas as pd
from tqdm.auto import tqdm


def clear_cuda_cache():
   gc.collect()
   if torch.cuda.is_available():
       torch.cuda.empty_cache()


def build_messages(question, system_prompt=SYSTEM_PROMPT):
   return [
       {"role": "system", "content": system_prompt},
       {
           "role": "user",
           "content": USER_TEMPLATE.format(question=clean_text(question)),
       },
   ]


def remove_thinking_text(text):
   text = text.strip()
   while "<think>" in text and "</think>" in text:
       start = text.find("<think>")
       end = text.find("</think>", start) + len("</think>")
       text = (text[:start] + text[end:]).strip()

   if "</think>" in text:
       text = text.split("</think>")[-1].strip()

   return text.replace("<think>", "").replace("</think>", "").strip()


def generate_answer(
   model, tokenizer, question, system_prompt=SYSTEM_PROMPT, max_new_tokens=180
):
   messages = build_messages(question, system_prompt)
   device = next(model.parameters()).device

   inputs = tokenizer.apply_chat_template(
       messages,
       tokenize=True,
       **CHAT_TEMPLATE_KWARGS,
       add_generation_prompt=True,
       return_dict=True,
       return_tensors="pt",
   )

   inputs = {key: value.to(device) for key, value in inputs.items()}
   input_len = inputs["input_ids"].shape[-1]

   with torch.no_grad():
       outputs = model.generate(
           **inputs,
           max_new_tokens=max_new_tokens,
           do_sample=False,
           use_cache=False,
           repetition_penalty=1.08,
           no_repeat_ngram_size=4,
           pad_token_id=tokenizer.pad_token_id,
           eos_token_id=tokenizer.eos_token_id,
       )

   decoded = tokenizer.decode(outputs[0][input_len:], skip_special_tokens=True).strip()

   return remove_thinking_text(decoded)


def generate_sample_table(model, tokenizer, examples, output_column):
   rows = []
   model.eval()

   for ex in tqdm(examples, desc=f"Generating {output_column}", leave=False):
       rows.append(
           {
               "question": clean_text(ex["question"]),
               "reference_response_j": clean_text(ex["response_j"]),
               output_column: generate_answer(model, tokenizer, ex["question"]),
           }
       )

   return pd.DataFrame(rows)

6. Evaluación de muestra antes del ajuste fino

Antes de entrenar, generaremos algunas respuestas con el modelo base Nemotron-3. Esto nos da una línea base para comparar después cómo responde el modelo antes y después del ajuste fino con LoRA.

Aquí seleccionamos tres ejemplos del conjunto de prueba y generamos respuestas usando la función auxiliar que creamos.

sample_examples = [dataset["test"][idx] for idx in range(min(3, len(dataset["test"])))]

pre_samples = generate_sample_table(
   base_model,
   tokenizer,
   sample_examples,
   "base_model_answer"
)

pre_samples

La salida es una pequeña tabla con la pregunta original, la respuesta de referencia de response_j y la respuesta generada por el modelo base. Esta tabla será útil después cuando la comparemos con las respuestas del modelo ajustado.

Evaluación de muestra previa al ajuste fino

7. Configuración de LoRA y parámetros de entrenamiento

Ahora prepararemos el modelo para el ajuste fino con LoRA. Activamos el gradient checkpointing para reducir el uso de memoria y creamos una configuración LoRA que apunte a todas las capas lineales del modelo.

from peft import LoraConfig

base_model.gradient_checkpointing_enable()
base_model.config.use_cache = False

lora_config = LoraConfig(
   r=32,
   lora_alpha=64,
   lora_dropout=0.1,
   bias="none",
   task_type="CAUSAL_LM",
   target_modules="all-linear",
)

Después, definimos los parámetros de ajuste fino supervisado usando SFTConfig. Estos parámetros controlan el tamaño de lote, la tasa de aprendizaje, el número de épocas, la frecuencia de evaluación, la estrategia de guardado y el entrenamiento en BF16.

from trl import SFTConfig, SFTTrainer

training_args = SFTConfig(
   output_dir=OUTPUT_DIR,
   per_device_train_batch_size=8,
   per_device_eval_batch_size=8,
   gradient_accumulation_steps=8,
   learning_rate=5e-5,
   weight_decay=0.01,
   lr_scheduler_type="linear",
   warmup_ratio=0.05,
   num_train_epochs=2,
   logging_steps=50,
   eval_strategy="steps",
   eval_steps=50,
   save_strategy="steps",
   save_steps=100,
   save_total_limit=2,
   load_best_model_at_end=True,
   metric_for_best_model="eval_loss",
   greater_is_better=False,
   gradient_checkpointing=True,
   bf16=True,
   fp16=False,
   tf32=True,
   max_length=MAX_SEQ_LENGTH,
   packing=False,
   completion_only_loss=True,
   remove_unused_columns=False,
   dataloader_num_workers=4,
   optim="adamw_torch_fused",
   report_to="none",
   seed=SEED,
)

8. Entrenamiento y guardado del adaptador LoRA

Ahora podemos crear el SFTTrainer, adjuntar la configuración LoRA y empezar el ajuste fino. Antes de entrenar, también comprobamos cuántos parámetros son entrenables para confirmar que el adaptador LoRA se adjuntó correctamente.

trainer = SFTTrainer(
   model=base_model,
   args=training_args,
   train_dataset=sft_dataset["train"],
   eval_dataset=sft_dataset["validation"],
   peft_config=lora_config,
   processing_class=tokenizer,
)

trainable_params = sum(
   param.numel() for param in trainer.model.parameters() if param.requires_grad
)

all_params = sum(param.numel() for param in trainer.model.parameters())

if trainable_params == 0:
   raise RuntimeError(
       "No trainable LoRA parameters were attached. Check target_modules before training."
   )

print(f"Trainable LoRA parameters: {trainable_params:,}")
print(f"All parameters visible to trainer: {all_params:,}")
print(f"Trainable percentage: {100 * trainable_params / all_params:.4f}%")

train_result = trainer.train()

trainer.model.eval()
trainer.model.config.use_cache = False
trainer.model.generation_config.use_cache = False

train_result

Durante el entrenamiento, la pérdida de entrenamiento y la de validación deberían ir disminuyendo de forma gradual. Suele indicar que el modelo está aprendiendo el estilo de respuesta del dataset.

Resultados del ajuste fino

Tras el entrenamiento, guarda localmente el adaptador LoRA y el tokenizer:

trainer.model.save_pretrained(OUTPUT_DIR)
tokenizer.save_pretrained(OUTPUT_DIR)

Después, sube el adaptador ajustado a Hugging Face:

HUB_REPO_ID = "kingabzpro/nemotron-3-nano-4b-bf16-psychology-qa-lora"

trainer.model.push_to_hub(HUB_REPO_ID, private=False)
tokenizer.push_to_hub(HUB_REPO_ID, private=False)

El adaptador ajustado ya está guardado localmente y subido a Hugging Face bajo HUB_REPO_ID.

Modelo ajustado subido a Hugging Face: kingabzpro/nemotron-3-nano-4b-bf16-psychology-qa-lora

Fuente: kingabzpro/nemotron-3-nano-4b-bf16-psychology-qa-lora

9. Comparación de respuestas antes y después del ajuste fino

Por último, generaremos respuestas con el modelo ajustado y las compararemos con las salidas del modelo base. Así veremos si el ajuste fino con LoRA ha mejorado la alineación del modelo con las respuestas de referencia.

post_samples = generate_sample_table(
   trainer.model,
   tokenizer,
   sample_examples,
   "fine_tuned_answer"
)

comparison = pre_samples[
   ["question", "reference_response_j", "base_model_answer"]
].merge(
   post_samples[["question", "fine_tuned_answer"]],
   on="question",
   how="left",
)

for idx, row in comparison.iterrows():
   print("=" * 100)
   print(f"Sample {idx + 1}")
   print("=" * 100)
   print("\nQUESTION:\n")
   print(row["question"])
   print("\nREFERENCE RESPONSE_J:\n")
   print(row["reference_response_j"])
   print("\nBASE MODEL ANSWER:\n")
   print(row["base_model_answer"])
   print("\nFINE-TUNED ANSWER:\n")
   print(row["fine_tuned_answer"])
   print("\n")

Comparación de respuestas antes y después del ajuste fino

El modelo ajustado quedó más alineado con el estilo de las respuestas de referencia. Fue más conciso y se mantuvo más cerca de las respuestas del dataset. Sin embargo, el modelo base a veces ofreció respuestas más detalladas y prácticas.

Por ejemplo, el modelo ajustado mejoró la alineación en preguntas sobre gestión del estrés y concentración, pero el modelo base dio una respuesta más sólida en el ejemplo relacionado con el sueño al incluir más detalle útil.

En general, el modelo ajustado es mejor si tu objetivo es replicar el estilo del dataset de referencia. Si buscas la máxima utilidad, el modelo base puede rendir mejor en algunos casos porque ofrece respuestas más cálidas y detalladas.

Si tienes problemas al ejecutar el código anterior, consulta el notebook en el repositorio de Hugging Face: fine-tune-nemotron-nano.ipynb

Reflexiones finales

Incluso tras ajustar más de 100 LLMs, este modelo necesitó más trabajo de configuración de lo esperado. El principal reto fue la dependencia mamba_ssm, que puede romperse con facilidad o entrar en conflicto con un entorno local de Python ya existente.

Por eso, recomiendo usar un entorno limpio para este flujo de trabajo. En mi caso, lo más sencillo fue reconstruir el entorno, instalar la versión correcta de PyTorch, fijar los paquetes relacionados con Mamba y ejecutar el notebook desde ahí.

Otra limitación es la cuantización. En esta configuración, no pude cargar el modelo en 4 bits y ajustarlo como en un flujo QLoRA estándar, como en mi tutorial de Qwen3.5 Small. Tuve que cargar el modelo completo en BF16 y luego ajustarlo con LoRA. Para un modelo de 4B, sigue siendo manejable en una GPU de 24 GB, pero en modelos de 12B o más, el uso de memoria puede convertirse rápidamente en un problema.

Dicho esto, el ajuste fino con GPUs de consumo es mucho más accesible. Con una tarjeta de 24 GB como la RTX 3090, ya es posible adaptar modelos abiertos potentes a un estilo o dominio concreto sin necesidad de un gran clúster de entrenamiento.

En resumen, Nemotron-3 Nano es un modelo capaz, pero exige una configuración del entorno cuidadosa. Una vez resueltas las dependencias, se ajusta bien y puede adaptarse a un nuevo estilo de respuesta con un número relativamente pequeño de ejemplos.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Soy un científico de datos certificado que disfruta creando aplicaciones de aprendizaje automático y escribiendo blogs sobre ciencia de datos. Actualmente me centro en la creación de contenidos, la edición y el trabajo con grandes modelos lingüísticos.

Temas

¡Aprende IA con DataCamp!

programa

Associate AI Engineer para desarrolladores

26 h
Aprende a integrar IA en aplicaciones de software usando APIs y bibliotecas de código abierto. ¡Empieza hoy tu camino para convertirte en AI Engineer!
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

Tutorial

Ajuste fino de GPT-3 mediante la API OpenAI y Python

Libere todo el potencial de GPT-3 mediante el ajuste fino. Aprenda a utilizar la API de OpenAI y Python para mejorar este modelo de red neuronal avanzado para su caso de uso específico.
Zoumana Keita 's photo

Zoumana Keita

Tutorial

Cómo ajustar GPT 3.5: Liberar todo el potencial de la IA

Explore GPT-3.5 Turbo y descubra el potencial transformador del ajuste fino. Aprenda a personalizar este modelo de lenguaje avanzado para aplicaciones especializadas, mejore su rendimiento y comprenda los costes asociados, la seguridad y las consideraciones de privacidad.
Moez Ali's photo

Moez Ali

Tutorial

Ajuste fino de SAM 2 en un conjunto de datos personalizado: Tutorial

Aprende a afinar SAM 2 de Meta AI utilizando el conjunto de datos de segmentación de TC torácica para mejorar el rendimiento de segmentación de imágenes del modelo en el análisis de imágenes médicas.
Aashi Dutt's photo

Aashi Dutt

Tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Tutorial FLAN-T5: Guía y puesta a punto

Una guía completa para afinar un modelo FLAN-T5 para una tarea de respuesta a preguntas utilizando la biblioteca de transformadores, y ejecutando la inferencia optmizada en un escenario del mundo real.
Zoumana Keita 's photo

Zoumana Keita

Tutorial

Guía para principiantes de LlaMA-Factory WebUI: Ajuste de los LLM

Aprende a afinar los LLM en conjuntos de datos personalizados, evaluar el rendimiento y exportar y servir modelos sin problemas utilizando el marco de trabajo de bajo/ningún código de LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

Ver másVer más