Pular para o conteúdo principal

Fine-tuning do NVIDIA Nemotron-3-Nano em dados de perguntas e respostas de psicologia

Aprenda a fazer fine-tuning do NVIDIA Nemotron-3-Nano-4B em um dataset de Q&A de psicologia usando uma GPU RTX 3090, com LoRA e TRL, após baixar o modelo do Hugging Face.
Atualizado 29 de abr. de 2026  · 6 min lido

NVIDIA Nemotron-3 é a nova família de modelos abertos da NVIDIA, criada para raciocínio, programação, chat e fluxos de trabalho com agentes de IA. Ela inclui diferentes tamanhos de modelo, como Nano, Super e Ultra, para que os desenvolvedores escolham entre modelos menores e eficientes ou maiores e de alta performance.

A grande novidade do Nemotron-3 é o foco em eficiência. Os modelos foram projetados para oferecer alto desempenho, mantendo a inferência e o fine-tuning mais viáveis. A versão Nano é especialmente útil para experimentação prática, pois roda em configurações de GPU mais acessíveis quando comparada a modelos maiores.

Neste guia, vamos fazer fine-tuning do NVIDIA Nemotron-3-Nano-4B em um dataset de perguntas e respostas de psicologia. Vamos usar Low-Rank Adaptation (LoRA), Transformers Reinforcement Learning (TRL) e Hugging Face para preparar os dados, treinar o modelo, salvar o adaptador, fazer o push para o Hugging Face e comparar as respostas antes e depois do fine-tuning.

Para começar a encontrar os modelos de IA open source mais recentes, criar agentes de IA e fazer fine-tuning de LLMs, recomendo se inscrever na nossa trilha de habilidades Hugging Face Fundamentals.

1. configurando o ambiente

O Nemotron-3 Nano usa uma arquitetura híbrida, então os pacotes relacionados ao Mamba precisam ser instalados corretamente. Em um notebook Jupyter, primeiro removemos a pilha existente do PyTorch e reinstalamos a build CUDA 12.8 do PyTorch 2.7.1, que funciona com as versões fixas de mamba_ssm e causal_conv1d usadas aqui.

Também instalamos as bibliotecas centrais de fine-tuning, incluindo transformers, trl, accelerate, datasets, peft e 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"

Depois de instalar os pacotes, verifique se a CUDA está disponível e se o PyTorch detecta sua GPU. Este notebook foi ajustado para uma GPU de 24 GB, então ele vai emitir um aviso se sua GPU tiver 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

Saída:

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.

Defina seu token do Hugging Face como uma variável de ambiente chamada HF_TOKEN. Isso permite que o notebook baixe o modelo Nemotron-3 e, depois, faça o push do adaptador LoRA ajustado para o 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. carregando e processando o dataset

Em seguida, vamos carregar o dataset de perguntas e respostas de psicologia do Hugging Face. O dataset contém uma coluna question e duas colunas de resposta: response_j e response_k. Para este guia, usaremos response_j como resposta-alvo para o fine-tuning supervisionado.

Primeiro, carregamos o dataset, embaralhamos para reprodutibilidade e criamos os splits de treino, validação e teste. 

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

Saída:

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 formatar o dataset para treino, verifique os nomes das colunas e visualize um exemplo. Isso confirma que o dataset foi carregado corretamente e contém os campos esperados de pergunta e resposta.

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

Saída:

(
    ['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. formatando o dataset para fine-tuning com TRL

Agora vamos converter o dataset para o formato de prompt-completion esperado pelo TRL. Cada exemplo incluirá um prompt de sistema, a pergunta do usuário sobre psicologia e a resposta-alvo do assistente a partir de response_j.

O prompt de sistema orienta como o modelo deve responder: ser acolhedor, evitar rastros de raciocínio ocultos, dar sugestões práticas e evitar agir como um profissional de saúde mental licenciado.

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]

Saída:

{
   '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. carregando o modelo base Nemotron-3

Agora vamos carregar o tokenizer e o modelo base NVIDIA Nemotron-3 Nano 4B BF16 do Hugging Face. Também definimos o diretório de saída para o adaptador LoRA e limitamos o comprimento de sequência a 1024 tokens para manter o treino viável em uma 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. criando funções auxiliares de geração

Antes do fine-tuning, vamos criar algumas funções auxiliares para testar as respostas do modelo. Essas funções montam o prompt de chat, geram uma resposta, removem quaisquer tags de “thinking” indesejadas e armazenam os resultados em uma pequena tabela de comparação.

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. executando uma avaliação antes do fine-tuning

Antes do treino, vamos gerar algumas respostas com o modelo base Nemotron-3. Isso nos dá uma linha de base para, depois, comparar como o modelo responde antes e depois do fine-tuning com LoRA.

Aqui, selecionamos três exemplos do conjunto de teste e geramos respostas usando a função auxiliar que criamos anteriormente.

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

A saída é uma pequena tabela com a pergunta original, a resposta de referência em response_j e a resposta gerada pelo modelo base. Essa tabela será útil mais adiante quando compararmos com as respostas do modelo ajustado.

Avaliação de amostras antes do fine-tuning

7. configurando o LoRA e as definições de treino

Agora vamos preparar o modelo para o fine-tuning com LoRA. Habilitamos o gradient checkpointing para reduzir o uso de memória e, em seguida, criamos uma configuração LoRA que mira todas as camadas lineares do 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",
)

Em seguida, definimos as configurações de fine-tuning supervisionado usando SFTConfig. Essas definições controlam o batch size, taxa de aprendizado, número de épocas, frequência de avaliação, estratégia de salvamento e treino em 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. treinando e salvando o adaptador LoRA

Agora podemos criar o SFTTrainer, anexar a configuração LoRA e iniciar o fine-tuning. Antes do treino, também verificamos quantos parâmetros são treináveis para confirmar que o adaptador LoRA foi anexado corretamente.

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 o treino, as perdas de treino e validação tendem a diminuir gradualmente. Isso geralmente indica que o modelo está aprendendo o estilo de resposta do dataset.

Resultados do fine-tuning

Após o treino, salve localmente o adaptador LoRA e o tokenizer:

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

Depois, faça o push do adaptador ajustado para o 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)

O adaptador ajustado agora está salvo localmente e carregado no Hugging Face sob o HUB_REPO_ID.

Push do modelo ajustado para o Hugging Face: kingabzpro/nemotron-3-nano-4b-bf16-psychology-qa-lora

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

9. comparando respostas antes e depois do fine-tuning

Por fim, vamos gerar respostas com o modelo ajustado e compará-las com as saídas do modelo base. Isso ajuda a ver se o fine-tuning com LoRA melhorou o alinhamento do modelo com as respostas de referência.

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")

Comparação de respostas antes e depois do fine-tuning

O modelo ajustado ficou mais alinhado com o estilo das respostas de referência. Ele se tornou mais conciso e permaneceu mais próximo das respostas do dataset. Porém, o modelo base às vezes ofereceu respostas mais detalhadas e práticas.

Por exemplo, o modelo ajustado melhorou o alinhamento em questões de gerenciamento de estresse e concentração, mas o modelo base apresentou uma resposta melhor no exemplo relacionado ao sono, por trazer mais detalhes úteis.

No geral, o modelo ajustado é melhor se seu objetivo é reproduzir o estilo do dataset de referência. Se a meta for máxima utilidade, o modelo base ainda pode se sair melhor em alguns casos por fornecer respostas mais calorosas e detalhadas.

Se você tiver problemas para executar o código acima, consulte o notebook no repositório do Hugging Face: fine-tune-nemotron-nano.ipynb

considerações finais

Mesmo após fazer fine-tuning em mais de 100 LLMs, este modelo exigiu mais configuração do que o esperado. O principal desafio foi a dependência mamba_ssm, que pode facilmente quebrar ou conflitar com um ambiente Python local existente.

Por isso, recomendo usar um ambiente limpo para esse fluxo. No meu caso, o caminho mais simples foi reconstruir o ambiente, instalar a versão correta do PyTorch, fixar os pacotes relacionados ao Mamba e então rodar o notebook a partir daí.

Outra limitação é a quantização. Nesta configuração, não consegui simplesmente carregar o modelo em 4 bits e fazer o fine-tuning como em um workflow QLoRA padrão, como no meu tutorial do Qwen3.5 Small. Tive que carregar o modelo completo em BF16 e então ajustá-lo com LoRA. Para um modelo de 4B, isso ainda é viável em uma GPU de 24 GB, mas para modelos de 12B ou mais, o uso de memória pode rapidamente virar um problema.

Dito isso, o fine-tuning em GPUs de consumo ficou muito mais acessível. Com uma placa de 24 GB como a RTX 3090, já é possível adaptar bons modelos abertos para um estilo ou domínio específico sem precisar de um grande cluster de treino.

No geral, o Nemotron-3 Nano é um modelo competente, mas exige um setup de ambiente cuidadoso. Uma vez que as dependências estejam funcionando, ele faz fine-tuning muito bem e consegue se adaptar a um novo estilo de resposta com um número relativamente pequeno de exemplos.


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

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Tópicos

Aprenda IA com a DataCamp!

Programa

Associate AI Engineer para desenvolvedores

26 h
Aprenda a integrar IA em aplicações de software usando APIs e bibliotecas de código aberto. Comece hoje sua jornada para se tornar um AI Engineer!
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

Tutorial

Como fazer o ajuste fino do GPT 3.5: Liberando todo o potencial da IA

Explore o GPT-3.5 Turbo e descubra o potencial transformador do ajuste fino. Saiba como personalizar esse modelo de linguagem avançado para aplicativos de nicho, aprimorar seu desempenho e entender os custos associados, a segurança e as considerações de privacidade.
Moez Ali's photo

Moez Ali

Tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

Tutorial

Ajuste fino do SAM 2 em um conjunto de dados personalizado: Tutorial

Saiba como fazer o ajuste fino do SAM 2 do Meta AI usando o conjunto de dados Chest CT Segmentation para melhorar o desempenho da segmentação de imagens do modelo na análise de imagens médicas.
Aashi Dutt's photo

Aashi Dutt

Tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Como treinar um LLM com o PyTorch

Domine o processo de treinamento de grandes modelos de linguagem usando o PyTorch, desde a configuração inicial até a implementação final.
Zoumana Keita 's photo

Zoumana Keita

Tutorial

Guia para iniciantes do LlaMA-Factory WebUI: Ajuste fino dos LLMs

Saiba como fazer o ajuste fino dos LLMs em conjuntos de dados personalizados, avaliar o desempenho e exportar e servir modelos com facilidade usando a estrutura com pouco ou nenhum código do LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

Ver maisVer mais