O Qwen2.5-Coder, também conhecido como CodeQwen, é uma série de modelos grandes de linguagem da Alibaba Cloud especializada em tarefas relacionadas a código. A série inclui seis tamanhos de modelo (0,5B, 1,5B, 3B, 7B, 14B e 32B) para atender às diversas necessidades dos desenvolvedores. Treinado com um grande volume de dados de código, o Qwen2.5-Coder se destaca em aplicações focadas em programação e mantém fortes habilidades matemáticas e de raciocínio. Este tutorial usa o modelo Qwen2.5-Coder-32B-Instruct como exemplo.
Visão geral do modelo
O Qwen2.5-Coder é uma série de modelos avançados e focados em código que suportam comprimento de contexto de até 128 mil tokens e são compatíveis com 92 linguagens de programação. Esses modelos apresentam excelente desempenho em várias tarefas relacionadas a código, incluindo geração multilíngue, conclusão e reparo de código. A variante ajustada por instruções, Qwen2.5-Coder-Instruct, aprimora o modelo base para oferecer melhor desempenho nessas tarefas e excelente generalização.
Os principais recursos incluem:
Capacidade de programação multilíngue: O Qwen2.5-Coder-Instruct apresenta desempenho excepcional no benchmark McEval, que abrange mais de 40 linguagens, incluindo linguagens de programação de nicho.
Capacidade de raciocínio de código: O modelo alcança resultados impressionantes no benchmark CRUXEval, demonstrando sólidas habilidades de raciocínio de código. Esse raciocínio aprimorado também se correlaciona com melhor desempenho em tarefas complexas de seguimento de instruções.
Capacidade matemática: Como disciplina fundamental para a programação, a matemática é outra área em que o modelo se destaca, demonstrando capacidades abrangentes em campos STEM.
Capacidades gerais: O Qwen2.5-Coder-Instruct herda as poderosas capacidades gerais do modelo base Qwen2.5, garantindo estabilidade e ampla aplicabilidade em uma vasta gama de tarefas.
Requisitos de ambiente
Regiões suportadas
Use o Model Gallery para executar este modelo nas regiões China (Beijing), China (Shanghai), China (Shenzhen), China (Hangzhou), China (Ulanqab) e Singapore.
Requisitos de recursos
|
Tamanho do modelo |
Requisitos de implantação |
Requisitos de treinamento |
|
Qwen2.5-Coder-0.5B/1.5B |
Mínimo: uma placa P4. Recomendado: uma placa GU30, A10, V100 ou T4. |
GPU com 16 GB ou mais de VRAM, como T4, P100 ou V100. |
|
Qwen2.5-Coder-3B/7B |
Mínimo: uma placa P100, T4 ou V100 (gn6v). Recomendado: uma placa GU30 ou A10. |
GPU com 24 GB ou mais de VRAM, como A10 ou T4. |
|
Qwen2.5-Coder-14B |
Mínimo: uma placa L20 ou GU60, ou duas placas GU30. Recomendado: duas placas GU60 ou L20. |
GPU com 32 GB ou mais de VRAM, como V100. |
|
Qwen2.5-Coder-32B |
Mínimo: duas placas GU60 ou L20, ou quatro placas A10. Recomendado: quatro placas GU60 ou L20, ou oito placas V100-32G. |
GPU com 80 GB ou mais de VRAM, como A800 ou H800. |
Implantar e chamar o modelo
Implantar modelo
-
Acesse a página do Model Gallery.
Faça login no PAI console.
No canto superior esquerdo da barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, clique em Workspaces e clique no nome do workspace desejado.
No painel de navegação à esquerda, escolha Quick Start > Model Gallery.
Na página do Model Gallery, localize e clique no cartão do modelo Qwen2.5-Coder-32B-Instruct para acessar a página de detalhes do modelo.
No canto superior direito, clique em Deploy. Aceite a configuração padrão e clique em OK para implantar o service. A implantação será bem-sucedida quando o status mudar para Running.
Este tutorial utiliza recursos públicos, cobrados com base no pagamento conforme o uso. Para evitar cobranças, pare ou exclua o service ao terminar.
Chamar modelo
Obter informações de invocação
Na página de detalhes do modelo, clique em View Call Information para visualizar o endpoint público e o token.
No painel Invocation Information exibido, selecione a aba Shared Gateway e copie o Public Endpoint e o Token.
Chamar por API
O exemplo a seguir mostra como chamar o modelo usando a API:
from openai import OpenAI
# 1. Configure the client.
# Replace <EAS_TOKEN> with the Token from the Invocation Information panel.
openai_api_key = "<EAS_TOKEN>"
# Replace <EAS_ENDPOINT> with the Public Endpoint from the Invocation Information panel.
openai_api_base = "<EAS_ENDPOINT>/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
# 2. Get the model name.
# For BladeLLM, set model = "". BladeLLM does not require the model parameter and does not support using client.models.list() to get the model name. Set it to an empty string to comply with the mandatory parameter requirement of the OpenAI SDK.
models = client.models.list()
model = models.data[0].id
print(model)
# 3. Initiate a chat completion request.
# Both streaming (stream=True) and non-streaming (stream=False) outputs are supported.
stream = True
chat_completion = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "hello"},
],
model=model,
top_p=0.8,
temperature=0.7,
max_tokens=1024,
stream=stream,
)
if stream:
for chunk in chat_completion:
print(chunk.choices[0].delta.content, end="")
else:
result = chat_completion.choices[0].message.content
print(result)
Para obter mais informações sobre chamadas de API, consulte Call the Model by Using an API.
Chamar por web UI
Também é possível chamar o modelo usando uma web UI. Para instruções detalhadas, consulte o cartão do modelo.
Após concluir a implantação do modelo, baixe o código do cliente na seção Web Application da página de detalhes do cartão do modelo e execute python webui_client.py --eas_endpoint "<EAS API Endpoint>" --eas_token "<EAS API Token>" para iniciar a aplicação web local para inferência. Obtenha o EAS API Endpoint e o EAS API Token nos detalhes do service EAS implantado. Execute python webui_client.py -h para visualizar mais descrições de parâmetros.
Ajuste fino do modelo
O Model Gallery fornece dois algoritmos de ajuste fino prontos para uso para o modelo Qwen2.5-Coder-32B-Instruct: ajuste fino supervisionado (SFT) e otimização direta de preferência (DPO).
Ajuste fino supervisionado (SFT)
O algoritmo de treinamento SFT suporta entrada no formato JSON, onde cada entrada de dados consiste em uma instrução e uma saída, representadas pelos campos "instruction" e "output", respectivamente. Exemplo:
[
{
"instruction": "Create a function to calculate the sum of a sequence of integers.",
"output": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum"
},
{
"instruction": "Generate a Python code for crawling a website for a specific type of data.",
"output": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))"
}
]
Otimização direta de preferência (DPO)
O algoritmo de treinamento DPO suporta entrada no formato JSON. Cada entrada de dados consiste em um prompt, uma resposta escolhida e uma resposta rejeitada, representadas pelos campos "prompt", "chosen" e "rejected", respectivamente. Exemplo:
[
{
"prompt": "Create a function to calculate the sum of a sequence of integers.",
"chosen": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum",
"rejected": "[x*x for x in [1, 2, 3, 5, 8, 13]]"
},
{
"prompt": "Generate a Python code for crawling a website for a specific type of data.",
"chosen": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))",
"rejected": "def remove_duplicates(string): \n result = \"\" \n prev = '' \n\n for char in string:\n if char != prev: \n result += char\n prev = char\n return result\n\nresult = remove_duplicates(\"AAABBCCCD\")\nprint(result)"
}
]
Na página do Model Gallery, clique no cartão do modelo Qwen2.5-Coder-32B-Instruct para acessar a página de detalhes do modelo.
-
Na página de detalhes do modelo, clique em Train no canto superior direito. Configure os seguintes parâmetros:
Configuração de conjunto de dados: Após preparar seus dados, faça upload para um bucket do Object Storage Service (OSS) ou selecione um conjunto de dados no NAS ou CPFS especificando um objeto de conjunto de dados. Você também pode usar um conjunto de dados público fornecido pelo PAI para enviar um job e testar o algoritmo.
Configuração de recursos de computação: O algoritmo requer uma GPU com 80 GB ou mais de VRAM. Certifique-se de ter recursos de computação suficientes na cota de recursos selecionada. Para as especificações de recursos exigidas por outros tamanhos de modelo, consulte Environment requirements.
-
Configuração de hiperparâmetros: A tabela a seguir lista os hiperparâmetros de treinamento. Ajuste esses valores ou use os padrões.
Clique em Train. O Model Gallery redireciona automaticamente para a página de detalhes do job, onde você pode monitorar o status do treinamento e visualizar logs.
O modelo treinado é registrado automaticamente no AI Asset - Model Management, onde você pode visualizar ou implantar o modelo. Para obter mais informações, consulte Register and Manage Models.
Avaliação do modelo
O PAI fornece um algoritmo de avaliação integrado para o modelo Qwen2.5-Coder-32B-Instruct. Use este algoritmo para avaliar o desempenho do modelo original e de suas versões com ajuste fino. Para obter mais informações, consulte Model Evaluation e Best Practices for Large Language Model Evaluation.
Compressão do modelo
Após o treinamento, quantize (comprima) o modelo antes da implantação para reduzir seus requisitos de armazenamento e computação. Para obter mais informações, consulte Model Compression.