Transfira o conhecimento de um modelo professor grande para um modelo aluno menor, mantendo o desempenho.
Este guia aborda o aumento de dados e a destilação com o Qwen2, desde o preparo dos dados de instrução até o treinamento e a implantação de um modelo aluno.
Fluxo de trabalho
-
{{XREF_0}}
Prepare seu conjunto de dados de treinamento no formato necessário.
-
{{XREF_1}}
Gere instruções semanticamente semelhantes com o Qwen2-1.5B-Instruct-Exp ou Qwen2-7B-Instruct-Exp para melhorar a generalização.
-
{{XREF_2}}
Refine as instruções — incluindo as aumentadas — com o Qwen2-1.5B-Instruct-Refine ou Qwen2-7B-Instruct-Refine para obter saídas mais ricas.
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False) -
{{XREF_3}}
Gere respostas do modelo professor com o Qwen2-72B-Instruct para o seu conjunto de dados de instruções.
-
{{XREF_4}}
Faça o ajuste fino de um modelo aluno menor no conjunto de dados completo de instrução-resposta para uso em produção.
Pré-requisitos
Cumpra os seguintes pré-requisitos:
Ative o pagamento conforme o uso para o PAI (DLC e EAS) e crie um workspace padrão. Para mais informações, consulte {{XREF_5}}.
Crie um bucket do OSS para armazenar os dados de treinamento e os arquivos de modelo. Para mais informações sobre como criar um bucket, consulte {{XREF_6}}.
Preparar dados de instrução
Prepare os dados de instrução seguindo as orientações em {{XREF_7}} e {{XREF_8}}:
Estratégia de preparação de dados
Siga estas estratégias para melhorar os resultados da destilação:
Prepare pelo menos algumas centenas de pontos de dados. Um volume maior de dados melhora o desempenho do modelo.
Garanta uma distribuição ampla e equilibrada entre cenários de tarefas, comprimentos de entrada/saída e idiomas.
Limpe e filtre dados anômalos usando métodos baseados em regras. Até mesmo pequenas quantidades podem degradar os resultados do ajuste fino.
Requisitos de formato de dados
O conjunto de dados de treinamento deve ser um arquivo JSON com um campo: instruction. Exemplo:
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # Input filename
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # Output filename
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
Opcional: Aumentar instruções
O aumento de instruções expande os conjuntos de dados fornecidos pelo usuário para aumentar a diversidade e a cobertura.
-
Por exemplo, dada esta entrada:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False) -
O modelo gera uma saída semelhante a esta:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False)
Uma maior diversidade de instruções melhora a generalização do modelo aluno. O PAI oferece dois modelos proprietários de aumento baseados no Qwen2: Qwen2-1.5B-Instruct-Exp e Qwen2-7B-Instruct-Exp. Implante qualquer um deles como um service do EAS:
Implantar service de modelo
Implante o modelo de aumento de instruções como um service online do EAS.
-
Acesse a página Model Gallery.
Faça login no PAI console.
No canto superior esquerdo, selecione sua região.
No painel de navegação à esquerda, escolha Workspaces e clique no nome do seu workspace.
No painel de navegação à esquerda, escolha .
Na página Model Gallery, pesquise por Qwen2-1.5B-Instruct-Exp ou Qwen2-7B-Instruct-Exp e clique em Deploy.
No painel Deploy, revise os valores padrão de Model Service Information e Resource Deployment Information. Modifique conforme necessário e clique em Deploy.
-
Na caixa de diálogo Billing Notice, clique em OK.
O sistema abre a página Deployment Task. Quando o Status exibir Running, a implantação terá sido concluída com êxito.
Chamar service de modelo
Após a implantação, use a API para executar inferências. Consulte {{XREF_9}}. Exemplo de solicitação de cliente:
-
Obtenha o endpoint e o token do service.
Na página Service Details, clique em Basic Information e, em seguida, clique em View Endpoint Information.
Na caixa de diálogo Endpoint Information, localize o endpoint e o token. Salve-os localmente.
-
Crie e execute este script Python:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False)Parâmetros:
host: Endpoint do service.
authorization: Token do service.
Aumento em lote
Aumente instruções em lote a partir de um conjunto de dados JSON usando a API do EAS. Crie e execute este script Python:
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # Input filename
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # Output filename
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
Parâmetros:
host: Endpoint do service.
authorization: Token do service.
file_path: Substitua pelo caminho local do seu arquivo de conjunto de dados.
As funções
post_http_requesteget_responsecorrespondem às definidas no script Python em {{XREF_10}}.
Como alternativa, utilize o componente LLM-Instruction Expansion (DLC) no PAI-Designer sem necessidade de código. Consulte {{XREF_11}}.
No fluxo de trabalho do PAI-Designer, adicione um nó Read OSS Data e conecte-o ao nó LLM-Instruction Expansion (DLC). Selecione o nó LLM-Instruction Expansion (DLC) e configure os seguintes parâmetros no painel Fields Setting à direita:
OSS RAM Role: Conclua a autorização.
Target Process Field: Insira o nome do campo a ser processado (obrigatório).
Model Name: Selecione um modelo, por exemplo,
qwen2-1.5b-instruct-exp.Output OSS Directory: Especifique o caminho de saída.
Opcional: Otimizar instruções
A otimização de instruções refina os prompts para torná-los mais detalhados e estruturados, gerando respostas mais ricas dos LLMs.
-
Por exemplo, dada esta entrada para o modelo de otimização de instruções:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False) -
O modelo gera uma saída semelhante a esta:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False)
Instruções mais detalhadas produzem melhores saídas dos LLMs. O PAI oferece dois modelos proprietários de otimização baseados no Qwen2: Qwen2-1.5B-Instruct-Refine e Qwen2-7B-Instruct-Refine. Implante qualquer um deles como um service do EAS:
Implantar service de modelo
-
Acesse a página Model Gallery.
Faça login no PAI console.
No canto superior esquerdo, selecione sua região.
No painel de navegação à esquerda, escolha Workspaces e clique no nome do seu workspace.
No painel de navegação à esquerda, escolha .
Na página Model Gallery, pesquise por Qwen2-1.5B-Instruct-Refine ou Qwen2-7B-Instruct-Refine e clique em Deploy.
No painel Deploy, revise os valores padrão de Model Service Information e Resource Deployment Information. Modifique conforme necessário e clique em Deploy.
-
Na caixa de diálogo Billing Notice, clique em OK.
O sistema abre a página Deployment Task. Quando o Status exibir Running, a implantação terá sido concluída com êxito.
Chamar service de modelo
Após a implantação, use a API para executar inferências. Consulte {{XREF_12}}. Exemplo de solicitação de cliente:
-
Obtenha o endpoint e o token do service.
Na página Service Details, clique em Basic Information e, em seguida, clique em View Endpoint Information.
Na caixa de diálogo Endpoint Information, localize o endpoint e o token. Salve-os localmente.
-
Crie e execute este script Python:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False)Parâmetros:
host: Endpoint do service.
authorization: Token do service.
Otimização em lote
Otimize instruções em lote a partir de um conjunto de dados JSON usando a API do EAS. Crie e execute este script Python:
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # Input filename
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # Output filename
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
Parâmetros:
host: Endpoint do service.
authorization: Token do service.
file_path: Substitua pelo caminho local do seu arquivo de conjunto de dados.
As funções
post_http_requesteget_responsecorrespondem às definidas no script Python em {{XREF_13}}.
Como alternativa, utilize o componente LLM-Instruction Optimization (DLC) no PAI-Designer sem necessidade de código. Consulte {{XREF_14}}.
No fluxo de trabalho do PAI-Designer, conecte o nó Read OSS Data ao nó LLM-Instruction Optimization (DLC). No painel Fields Setting à direita, conclua a seguinte configuração:
OSS RAM Role: Conclua a autorização.
Target Process Field: Insira o nome do campo a ser processado.
Model Name: Selecione
qwen2-1.5b-instruct-refine.Output OSS Directory: Especifique o caminho de saída.
Gerar respostas com o modelo professor
Implantar service de modelo
Implante um LLM professor para gerar respostas para o seu conjunto de dados de instruções otimizadas:
-
Acesse a página Model Gallery.
Faça login no PAI console.
No canto superior esquerdo, selecione sua região.
No painel de navegação à esquerda, escolha Workspaces e clique no nome do seu workspace.
No painel de navegação à esquerda, escolha .
Na página Model Gallery, pesquise por Qwen2-72B-Instruct e clique em Deploy.
No painel Deploy, revise os valores padrão de Model Service Information e Resource Deployment Information. Modifique conforme necessário e clique em Deploy.
-
Na caixa de diálogo Billing Notice, clique em OK.
O sistema abre a página Deployment Task. Quando o Status exibir Running, a implantação terá sido concluída com êxito.
Chamar service de modelo
Após a implantação, use a API para executar inferências. Consulte {{XREF_15}}. Exemplo de solicitação de cliente:
-
Obtenha o endpoint e o token do service.
Na página Service Details, clique em Basic Information e, em seguida, clique em View Endpoint Information.
Na caixa de diálogo Endpoint Information, localize o endpoint e o token. Salve-os localmente.
-
Crie e execute este script Python:
import json from tqdm import tqdm import requests from typing import List input_file_path = "input.json" # Input filename with open(input_file_path) as fp: data = json.load(fp) pbar = tqdm(total=len(data)) new_data = [] for d in data: system_prompt = "You are a helpful assistant." prompt = d["instruction"] print(prompt) top_k = 50 top_p = 0.95 temperature = 0.5 max_new_tokens = 2048 host = "EAS HOST" authorization = "EAS TOKEN" response = post_http_request( prompt, system_prompt, host, authorization, max_new_tokens, temperature, top_k, top_p) output = get_response(response) temp = { "instruction": prompt, "output": output } new_data.append(temp) pbar.update(1) pbar.close() output_file_path = "output.json" # Output filename with open(output_file_path, 'w') as f: json.dump(new_data, f, ensure_ascii=False)Parâmetros:
host: Endpoint do service.
authorization: Token do service.
Anotação de instruções em lote pelo modelo professor
Anote instruções em lote a partir de um conjunto de dados JSON usando a API do modelo professor. Crie e execute este script Python:
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # Input filename
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # Output filename
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
Parâmetros:
host: Endpoint do service.
authorization: Token do service.
file_path: Substitua pelo caminho local do seu arquivo de conjunto de dados.
As funções
post_http_requesteget_responsecorrespondem às definidas no script em {{XREF_16}}.
Treinar modelo aluno
Treinar o modelo
Treine um modelo aluno no Model Gallery usando o conjunto de dados gerado pelo professor. Este exemplo utiliza o Qwen2-7B-Instruct:
-
Acesse a página Model Gallery.
Faça login no PAI console.
No canto superior esquerdo, selecione sua região.
No painel de navegação à esquerda, escolha Workspaces e clique no nome do seu workspace.
No painel de navegação à esquerda, escolha .
Na página Model Gallery, pesquise e clique no cartão Qwen2-7B-Instruct para abrir sua página de detalhes.
Na página de detalhes do modelo, clique em Fine-tune no canto superior direito.
-
No painel Fine-tune, defina estes parâmetros principais. Mantenha os demais com os valores padrão.
Parameter
Description
Default value
Dataset configuration
Training dataset
Selecione OSS file or directory na lista suspensa e escolha o caminho do OSS do seu conjunto de dados:
-
Clique em
e selecione seu bucket do OSS. -
Clique em Upload file. Faça upload do arquivo do seu conjunto de dados para o diretório do OSS.
-
Clique em OK.
None
Training output configuration
model
Clique em
e selecione seu diretório de armazenamento no OSS.None
tensorboard
Clique em
e selecione seu diretório de armazenamento no OSS.None
Compute resource configuration
Job resources
Selecione uma especificação de recurso. O sistema recomenda opções adequadas.
None
Hyperparameter configuration
learning_rate
Taxa de aprendizado. Tipo: Float.
5e-5
num_train_epochs
Número de épocas de treinamento. Tipo: INT.
1
per_device_train_batch_size
Número de amostras de treinamento por GPU por iteração. Tipo: INT.
1
seq_length
Comprimento da sequência de texto. Tipo: INT.
128
lora_dim
Dimensão do LoRA. Tipo: INT. Se lora_dim>0, usa treinamento leve LoRA/QLoRA.
32
lora_alpha
Peso do LoRA. Tipo: INT. Entra em vigor apenas se lora_dim>0 e o treinamento leve LoRA/QLoRA for utilizado.
32
load_in_4bit
Define se o modelo deve ser carregado no modo de 4 bits. Tipo: bool. Valores válidos:
-
true
-
false
Se lora_dim>0, load_in_4bit for true e load_in_8bit for false, utiliza treinamento leve QLoRA de 4 bits.
true
load_in_8bit
Define se o modelo deve ser carregado no modo de 8 bits. Tipo: bool. Valores válidos:
-
true
-
false
Se lora_dim>0, load_in_4bit for false e load_in_8bit for true, utiliza treinamento leve QLoRA de 8 bits.
false
gradient_accumulation_steps
Número de etapas de acumulação de gradiente. Tipo: INT.
8
apply_chat_template
Define se os dados de treinamento devem ser combinados com o modelo de chat padrão. Tipo: bool. Valores válidos:
-
true
-
false
Para modelos da série Qwen2, o formato é:
-
Question:
<|im_end|>\n<|im_start|>user\n + instruction + <|im_end|>\n -
Answer:
<|im_start|>assistant\n + output + <|im_end|>\n
true
system_prompt
Prompt do sistema para treinamento. Tipo: String.
You are a helpful assistant
-
Após definir os parâmetros, clique em Train.
-
Na caixa de diálogo Billing Notice, clique em OK.
O sistema abre a página da tarefa de treinamento.
Implantar service de modelo
Após o treinamento, implante o modelo como um service do EAS.
Na página da tarefa de treinamento, clique em Deploy no lado direito.
No painel de implantação, o sistema define valores padrão para Model Service Information e Resource Deployment Information. Modifique conforme necessário e clique em Deploy.
-
Na caixa de diálogo Billing Notice, clique em OK.
O sistema abre a página Deployment Task. Quando o Status exibir Running, a implantação terá sido concluída com êxito.
Chamar service de modelo
Após a implantação, use a API para inferência. Consulte {{XREF_17}}.
Referências
Consulte {{XREF_18}}.
O PAI-Model Gallery suporta a implantação e o ajuste fino de modelos para diversos cenários, incluindo Llama-3, Qwen1.5 e Stable Diffusion V1.5. {{XREF_19}}.