Text Generation
Transformers
Safetensors
PEFT
Portuguese
English
Spanish
qwen2
qwen2.5
qlora
lora
python
code
code-generation
conversational
text-generation-inference
Instructions to use raporto/pycoder-3b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use raporto/pycoder-3b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="raporto/pycoder-3b") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("raporto/pycoder-3b") model = AutoModelForCausalLM.from_pretrained("raporto/pycoder-3b", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - PEFT
How to use raporto/pycoder-3b with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use raporto/pycoder-3b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "raporto/pycoder-3b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "raporto/pycoder-3b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/raporto/pycoder-3b
- SGLang
How to use raporto/pycoder-3b with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "raporto/pycoder-3b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "raporto/pycoder-3b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "raporto/pycoder-3b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "raporto/pycoder-3b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use raporto/pycoder-3b with Docker Model Runner:
docker model run hf.co/raporto/pycoder-3b
|
Download README.md from raporto/pycoder-3b: direct link, hf CLI and curl.
- Browser
- Download file 6.77 kB
-
https://huggingface.co/raporto/pycoder-3b/resolve/main/README.md
- Command line
-
hf download hf://raporto/pycoder-3b/README.md
-
curl -L -o README.md https://huggingface.co/raporto/pycoder-3b/resolve/main/README.md
6.77 kB
| license: apache-2.0 | |
| base_model: Qwen/Qwen2.5-3B-Instruct | |
| library_name: transformers | |
| pipeline_tag: text-generation | |
| language: | |
| - pt | |
| - en | |
| - es | |
| tags: | |
| - qwen2.5 | |
| - qlora | |
| - lora | |
| - peft | |
| - python | |
| - code | |
| - code-generation | |
| datasets: | |
| - iamtarun/python_code_instructions_18k_alpaca | |
| # pycoder-3b | |
| Fine-tuning QLoRA de [`Qwen/Qwen2.5-3B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct) para assistência em programação Python, com o adapter LoRA já mesclado nos pesos base. | |
| O objetivo do ajuste é a **forma da resposta**, não conhecimento novo: entregar código completo e executável em vez de fragmentos, manter consistência de estilo e responder em português sem perder a capacidade original do modelo em inglês. | |
| Versão quantizada para execução local: [`raporto/pycoder-3b-GGUF`](https://huggingface.co/raporto/pycoder-3b-GGUF). | |
| ## Formato de prompt | |
| ChatML do Qwen2.5, com system prompt em português: | |
| ```text | |
| <|im_start|>system | |
| Você é um assistente especialista em programação Python.<|im_end|> | |
| <|im_start|>user | |
| Escreva uma função que...<|im_end|> | |
| <|im_start|>assistant | |
| ``` | |
| O `apply_chat_template` do tokenizer já produz esse formato. Usar um template diferente do treino degrada bastante o resultado. | |
| ## Uso | |
| ```python | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| import torch | |
| model_id = "raporto/pycoder-3b" | |
| tokenizer = AutoTokenizer.from_pretrained(model_id) | |
| model = AutoModelForCausalLM.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto") | |
| messages = [ | |
| {"role": "system", "content": "Você é um assistente especialista em programação Python."}, | |
| {"role": "user", "content": "Escreva uma função que remova duplicados de uma lista preservando a ordem."}, | |
| ] | |
| inputs = tokenizer.apply_chat_template( | |
| messages, add_generation_prompt=True, return_dict=True, return_tensors="pt" | |
| ).to(model.device) | |
| outputs = model.generate(**inputs, max_new_tokens=768, temperature=0.2, top_p=0.9, do_sample=True) | |
| print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)) | |
| ``` | |
| Em versões do Transformers anteriores à 5, use `torch_dtype` no lugar de `dtype`. | |
| ### Parâmetros recomendados | |
| | Parâmetro | Valor | Motivo | | |
| |---|---|---| | |
| | `temperature` | 0.15 – 0.3 | Geração de código pede determinismo. | | |
| | `top_p` | 0.9 | | | |
| | `repetition_penalty` | 1.05 | Evita loops sem penalizar repetição legítima em código. | | |
| | `max_new_tokens` | 768 – 1024 | Implementação com testes cabe nessa faixa. | | |
| ## Treinamento | |
| QLoRA em 4 bits (NF4 com double quantization), adapters LoRA sobre todas as projeções de atenção e MLP (`q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj`). Apenas os tokens da resposta do assistente entram na perda; os tokens de prompt recebem `label = -100`. | |
| Os exemplos foram concatenados em blocos contíguos de 1024 tokens (sequence packing), com ~89% de aproveitamento. Exemplos acima do limite foram descartados em vez de truncados, para não ensinar o modelo a interromper código no meio. | |
| ```json | |
| { | |
| "model": "Qwen/Qwen2.5-3B-Instruct", | |
| "dataset": "iamtarun/python_code_instructions_18k_alpaca", | |
| "dtype": "torch.bfloat16", | |
| "packing": true, | |
| "train_samples": 3431, | |
| "train_tokens": 3124347, | |
| "effective_batch": 16, | |
| "steps": 215, | |
| "train_loss": 0.48165738638057265, | |
| "eval_loss": 0.47419440746307373, | |
| "perplexity": 1.6067193148929226, | |
| "lora": { | |
| "r": 16, | |
| "alpha": 32, | |
| "dropout": 0.05 | |
| } | |
| } | |
| ``` | |
| | Item | Valor | | |
| |---|---| | |
| | Parâmetros treináveis | 29.933.568 de 3.115.872.256 (0,96%) | | |
| | Blocos de treino | 3.431 (dataset completo, 18.612 exemplos) | | |
| | Tokens de treino | 3.124.347 | | |
| | Épocas | 1 | | |
| | Batch efetivo | 16 | | |
| | Learning rate | 2e-4, cosine, warmup 3% | | |
| | Precisão | bf16 | | |
| | Otimizador | paged AdamW 8-bit | | |
| `train_samples` conta blocos empacotados, não exemplos: o dataset foi percorrido integralmente. | |
| A perplexidade de 1,61 é calculada apenas sobre os tokens de resposta e não é comparável à perplexidade de modelos de linguagem de propósito geral. | |
| ## Avaliação | |
| A perda de validação sozinha não diz se o código funciona. A avaliação deste modelo usa um benchmark de tarefas Python com testes executáveis, medindo em quatro camadas: presença de bloco de código, validade sintática (`ast.parse`), execução sem exceção e aprovação nos asserts da tarefa (pass@1 e pass@k). | |
| Recomenda-se reexecutar o benchmark contra o modelo base antes de adotar este ajuste em qualquer fluxo, e novamente após quantizar, já que a perda de precisão pode alterar o resultado. | |
| ## Idiomas | |
| Treinado com system prompt e instruções em português, sobre um dataset de código em inglês. Responde bem em **português** e **inglês**. O **espanhol** é herdado da capacidade multilíngue do Qwen2.5 e não foi alvo do ajuste, portanto não tem garantia de consistência de formato. | |
| Código, nomes de identificadores e mensagens de erro permanecem em inglês, como é convenção em Python. | |
| ## Limitações | |
| Modelo de 3B parâmetros treinado em ~18k exemplos de instrução. Serve como assistente de código do dia a dia, não como fonte autoritativa: **valide o código gerado antes de executar em produção**. | |
| Limitações específicas: | |
| - **Alucinação de API.** Pode inventar parâmetros ou métodos de bibliotecas de terceiros. Confira contra a documentação oficial. | |
| - **Contexto e raciocínio longos.** Refatorações amplas, dependências entre múltiplos arquivos e cadeias longas de raciocínio estão acima do que essa faixa de tamanho entrega de forma confiável. | |
| - **Contaminação.** O modelo base provavelmente já viu parte do dataset de treino. Avaliações feitas com tarefas derivadas desse dataset superestimam o desempenho. | |
| - **Segurança.** O código gerado não passa por análise de segurança. Trate-o como código de terceiros: revise antes de executar, especialmente se manipular arquivos, rede ou entrada não confiável. | |
| - **Escopo.** Ajustado para Python. Outras linguagens funcionam apenas na medida do modelo base. | |
| ## Licença | |
| Apache 2.0, herdada do modelo base Qwen2.5-3B-Instruct. Verifique também os termos do dataset antes de redistribuir derivados. | |
| ## Créditos | |
| - Modelo base: [Qwen/Qwen2.5-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct) | |
| - Dataset: [iamtarun/python_code_instructions_18k_alpaca](https://huggingface.co/datasets/iamtarun/python_code_instructions_18k_alpaca) | |
| - Método: [QLoRA (Dettmers et al., 2023)](https://arxiv.org/abs/2305.14314) e [LoRA (Hu et al., 2021)](https://arxiv.org/abs/2106.09685) |