Aprendizagem pessoal com IA
e orientação prática

Qwen2.5-1M: um modelo Qwen de código aberto com suporte para 1 milhão de contextos de tokens

1. introdução

Dois meses atrás, a equipe da Qwen atualizou o Qwen2.5-Turbo para suportar comprimentos de contexto de até um milhão de tokens. Hoje, a Qwen lançou oficialmente o modelo de código aberto Qwen2.5-1M e seu suporte à estrutura de inferência correspondente. Aqui estão os destaques do lançamento:

Modelos de código aberto: Dois novos modelos de código aberto foram lançados, que são Qwen2.5-7B-Instruct-1M responder cantando Qwen2.5-14B-Instruct-1MEsta é a primeira vez que a Qwen estende o contexto do modelo Qwen de código aberto para 1M de comprimento.

Estrutura de raciocínio: Para ajudar os desenvolvedores a implantar a família de modelos Qwen2.5-1M com mais eficiência, a equipe do Qwen abriu totalmente o código aberto da estrutura de inferência baseada em vLLM e integrou a abordagem de atenção esparsa, o que torna a estrutura mais rápida no processamento de 1 milhão de entradas marcadas por 3x a 7x.


Relatório técnico: A equipe da Qwen também compartilhou os detalhes técnicos por trás da série Qwen2.5-1M, incluindo o design thinking por trás das estruturas de treinamento e inferência e os resultados dos experimentos de ablação.

 

Link do modelo:https://www.modelscope.cn/collections/Qwen25-1M-d6cf9fd33f0a40

Relatório técnico:https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-1M/Qwen2_5_1M_Technical_Report.pdf

Links de experiência:https://modelscope.cn/studios/Qwen/Qwen2.5-1M-Demo

2. desempenho do modelo

Primeiro, vamos dar uma olhada no desempenho da família de modelos Qwen2.5-1M em tarefas de contexto longo e tarefas de texto curto.

 

tarefa de contexto longo

Na tarefa Passkey Retrieval com um contexto de 1 milhão de tokens, a família de modelos Qwen2.5-1M recupera com precisão informações ocultas de documentos de 1 milhão de tokens, com apenas alguns erros no modelo 7B.

 

Para tarefas mais complexas de compreensão de contextos longos, foram escolhidos os conjuntos de testes RULER, LV-Eval e LongbenchChat.

A partir desses resultados, é possível chegar às seguintes conclusões importantes:

  • Supera significativamente o desempenho da versão de 128K:A família de modelos Qwen2.5-1M supera significativamente o desempenho da versão anterior de 128K para a maioria das tarefas de contexto longo, especialmente quando se trata de tarefas com mais de 64K de comprimento.
  • As vantagens de desempenho são óbvias:O modelo Qwen2.5-14B-Instruct-1M não apenas supera o Qwen2.5-Turbo, mas também supera consistentemente o GPT-4o-mini em vários conjuntos de dados, fornecendo um modelo de código aberto preferido para tarefas de contexto longo.

 

tarefa sequencial curta

Além do desempenho em tarefas de sequências longas, o desempenho do modelo em sequências curtas é igualmente importante. A série de modelos Qwen2.5-1M e as versões anteriores de 128K foram comparadas em benchmarks acadêmicos amplamente utilizados, e o GPT-4o-mini foi adicionado para comparação.

Ele pode ser encontrado:

  • O desempenho do Qwen2.5-7B-Instruct-1M e do Qwen2.5-14B-Instruct-1M na tarefa de texto curto é comparável ao de suas versões de 128K, garantindo que os recursos básicos não foram comprometidos pela adição de recursos de processamento de sequências longas.
  • Em comparação com o GPT-4o-mini, o Qwen2.5-14B-Instruct-1M e o Qwen2.5-Turbo alcançam desempenho semelhante na tarefa de texto curto, enquanto o comprimento do contexto é oito vezes maior que o do GPT-4o-mini.

 

3. principais tecnologias

Treinamento de contexto longo

O treinamento de sequências longas exige muitos recursos computacionais, portanto, uma expansão gradual do comprimento foi usada para estender o comprimento do contexto do Qwen2.5-1M de 4K para 256K em vários estágios:

A partir de um ponto de verificação intermediário do Qwen2.5 pré-treinado, o comprimento do contexto é 4K nesse ponto.

Durante a fase de pré-treinamentoAlém disso, o comprimento do contexto foi gradualmente aumentado de 4K para 256K, enquanto a frequência base do RoPE foi aumentada de 10.000 para 10.000.000 usando o esquema de frequência base ajustada.

Durante a fase de ajuste fino do monitoramentoem dois estágios para manter o desempenho em sequências curtas:

   Fase I: O ajuste fino é feito somente em instruções curtas (até 32K de comprimento), em que os mesmos dados e número de etapas são usados como na versão de 128K do Qwen2.5.

   Fase II: Uma combinação de instruções curtas (até 32K) e longas (até 256K) é implementada para aprimorar o desempenho de tarefas longas e, ao mesmo tempo, manter a qualidade das tarefas curtas.

Na fase de aprendizado intensivoque treina o modelo em textos curtos (até 8 mil tokens). Descobrimos que, mesmo quando treinado em livros didáticos curtos, o aumento no alinhamento preferido por humanos se generaliza bem para tarefas de contexto longo. Com o treinamento acima, temos um modelo Instruct que pode lidar com sequências de até 256 mil tokens.

Com o treinamento acima, obtém-se um modelo de ajuste fino de instrução com comprimento de contexto de 256K.

 

Extrapolação de comprimento

No processo de treinamento acima, o comprimento do contexto do modelo é de apenas 256 mil tokens. Para dimensioná-lo para 1 milhão de tokens, é usada uma técnica de extrapolação de comprimento.

Atualmente, os modelos de linguagem em grande escala baseados na codificação de posição rotacional produzem degradação do desempenho em tarefas de contexto longo, o que se deve principalmente à grande distância de posição relativa entre Query e Key, que não é vista durante o processo de treinamento, ao calcular os pesos de atenção. Para resolver esse problema, o Qwen2.5-1M usa a abordagem Dual Chunk Attention (DCA), que resolve esse desafio pegando as posições relativas excessivamente grandes e remapeando-as para valores menores.

O modelo Qwen2.5-1M e a versão anterior de 128K foram avaliados com e sem o método de extrapolação de comprimento.

Os resultados mostram que mesmo os modelos treinados apenas em 32 mil tokens, como o Qwen2.5-7B-Instruct, não conseguem lidar com o contexto de 1 milhão de tokens do Passkey Recuperação A tarefa também atinge uma precisão quase perfeita. Isso demonstra a capacidade do DCA de expandir significativamente o comprimento dos contextos suportados sem treinamento adicional.

 

mecanismo de atenção esparsa (em física de partículas)

Para modelos de linguagem de contexto longo, a velocidade de inferência é crucial para a experiência do usuário. Para acelerar a fase de pré-população, a equipe de pesquisa introduz um mecanismo de atenção esparsa com base na MInference. Além disso, são propostos vários aprimoramentos:

  • Preenchimento em pedaços: se o modelo for usado diretamente para processar sequências de até 1 milhão de comprimento, os pesos de ativação da camada MLP incorrerão em uma enorme sobrecarga de memória, de até 71 GB no caso do Qwen2-5-7B. Tomando o Qwen2.5-7B como exemplo, essa parte da sobrecarga chega a 71 GB. Adaptando o Chunked Prefill com Sparse Attention, a sequência de entrada pode ser dividida em pedaços de 32768 comprimentos e pré-preenchida uma a uma, e o uso de memória dos pesos de ativação na camada MLP pode ser reduzido em 96,7%, o que pode reduzir significativamente o requisito de memória do dispositivo.
  • Esquema de extrapolação de comprimento integrado: além disso, integramos um esquema de extrapolação de comprimento baseado em DCA ao mecanismo de atenção esparsa, o que permite que nossa estrutura de inferência tenha maior eficiência e precisão de inferência para tarefas de sequências longas.
  • Otimização de esparsidade: o método MInference original requer uma pesquisa off-line para determinar a configuração de esparsificação ideal para cada cabeça de atenção. Essa pesquisa geralmente é realizada em sequências curtas e não necessariamente funciona bem com sequências mais longas devido aos grandes requisitos de memória dos pesos de atenção total. Propomos um método que pode otimizar a configuração de esparsificação em sequências de 1 milhão de comprimentos, reduzindo significativamente a perda de precisão devido à atenção esparsa.
  • Outras otimizações: introduzimos outras otimizações, como a otimização da eficiência do operador e o paralelismo dinâmico do pipeline de fragmentação, a fim de explorar todo o potencial de toda a estrutura.

 

Com esses aprimoramentos, a estrutura de inferência é capaz de reduzir o número de 1M token A velocidade de pré-população de sequências de comprimento foi aumentada de 3,2 vezes para 6,7 vezes.

4. implantação do modelo

Preparação do sistema

Para obter o melhor desempenho, é recomendável usar uma GPU com arquitetura Ampere ou Hopper que ofereça suporte a núcleos otimizados.

Certifique-se de que os seguintes requisitos sejam atendidos:

  • Versão CUDA: 12.1 ou 12.3
  • Versão do Python: >=3.9 e <=3.12

Requisitos de memória para processar sequências de 1 milhão de comprimentos:

  • Qwen2.5-7B-Instruct-1M: requer pelo menos 120 GB de memória de vídeo (soma de várias GPUs).
  • Qwen2.5-14B-Instruct-1M: requer pelo menos 320 GB de memória de vídeo (soma de várias GPUs).

Se a memória da GPU não atender a esses requisitos, você ainda poderá usar o Qwen2.5-1M para tarefas mais curtas.

 

Instalação de dependências

Por enquanto, você precisa clonar o repositório vLLM de uma ramificação personalizada e instalá-lo manualmente. A equipe de pesquisa está trabalhando para confirmar essa ramificação no projeto vLLM.

git clone -b dev/dual-chunk-attn git@github.com:QwenLM/vllm.git
cd vllm
pip install -e . -v

Iniciando um serviço de API compatível com OpenAI

Especifica que o modelo deve ser baixado do ModelScope

exportar VLLM_USE_MODELSCOPE=True

Lançamento de serviços de API compatíveis com a OpenAI

vllm serve Qwen/Qwen2.5-7B-Instruct-1M \
  --tensor-parallel-size 4 \
  --max-model-len 1010000 \
  --enable-chunked-prefill
 --max-num-batched-tokens 131072 \
  --enforce-eager \
  ---max-num-seqs 1

Descrição do parâmetro:

    • --tensor-parallel-size
      • A configuração é o número de GPUs que você usa. Os modelos 7B suportam até 4 GPUs e os modelos 14B suportam até 8 GPUs.
    • --max-model-len
      • Define o comprimento máximo da sequência de entrada. Reduza esse valor se tiver problemas de falta de memória.
    • --max-num-batched-tokens
      • Define o tamanho do bloco do Chunked Prefill. Um valor menor reduz o uso da memória de ativação, mas pode tornar o raciocínio mais lento.
      • O valor recomendado é 131072 para um desempenho ideal.
    • --max-num-seqs
      • Limitar o número de sequências processadas simultaneamente.

 

Interagindo com modelos

Os métodos a seguir podem ser usados para interagir com o modelo implantado:

Opção 1.

curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "modelo": "Qwen/Qwen2.5-7B-Instruct-1M", "mensagens": [
  "messages": [
    {
      "role": "user", "content".
      "content": "Tell me something about large language models."
    }
  ], "temperature": 0,7
  
  
  "repetition_penalty": 1,05, "max_tokens": 512,0
  "max_tokens": 512
}'

 

Opção 2: usar Python

from openai import OpenAI

openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"

cliente = OpenAI(
    api_key=openai_api_key, base_url=openai_api_base, openai_api_base = "")
    base_url=openai_api_base, )
)

prompt = (
    """Há uma informação importante escondida em um monte de texto irrelevante.
    Encontre-as e memorize-as. Farei um teste com você sobre as informações importantes que estão lá.\n\n
    A chave de acesso é 28884. Lembre-se dela. 28884 é a chave de acesso.\n""""
    + "A grama é verde, o céu é azul, o sol é amarelo, aqui vamos nós, para lá e para cá." * 800
    + "\nQual é a chave de acesso?"
" * 800 + "\nQual é a chave de acesso?")

# O prompt tem 20k de comprimento. Você pode tentar um prompt mais longo substituindo 800 por 40000.
chat_response = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct-1M",
    messages=[
        {"role": "user", "content": prompt}, [
    ],, temperature=0.7,, }, }, }, }, }, }, }, }
    temperature=0.7,
    top_p=0.8, max_tokens=512
    top_p=0.8, max_tokens=512,
    extra_body={
        "repetition_penalty": 1,05,
    }
)

print("Resposta do chat:", chat_response)

Você também pode explorar outras estruturas, como o Qwen-Agent, para permitir que os modelos leiam arquivos PDF, etc.

 

5) Use o Magic Hitch API-Inference para chamá-lo diretamente.

A API-Inference da plataforma Magic Match também oferece suporte para os modelos Qwen2.5-7B-Instruct-1M e Qwen2.5-14B-Instruct-1M pela primeira vez. Os usuários do Magic Hitch podem usar o modelo diretamente por meio de chamadas de API. O uso específico da API-Inference pode ser descrito na página do modelo (por exemplo, https://modelscope.cn/models/Qwen/Qwen2.5-14B-Instruct-1M):

Ou consulte a documentação da API-Inference: https://www.modelscope.cn/docs/model-service/API-Inference/intro

 

Agradecemos à AliCloud Hundred Refinement Platform por fornecer suporte aritmético nos bastidores.

Uso de Ollama e llamafile

Para facilitar seu uso local, o Magic Hitch fornece a versão GGUF e a versão llamafile do modelo Qwen2.5-7B-Instruct-1M pela primeira vez. Ele pode ser chamado pela estrutura Ollama ou usar o llamafile diretamente.

1. chamada de Ollama

Primeiro, configure o ollama em enable:

ollama servir

 

Em seguida, você pode executar o modelo GGUF no Magic Hitch diretamente usando o comando ollama run:

ollama run modelscope.co.uk/modelscope/Qwen2.5-7B-Instruct-1M-GGUF

Resultados da corrida:

2. modelo llamafile pull-up diretamente

Llamafile Fornece uma solução em que o modelo grande e o ambiente de tempo de execução são todos encapsulados em um único arquivo executável. Por meio da integração da linha de comando do Magic Ride e do llamafile, você pode realmente executar o modelo grande com um clique em diferentes ambientes de sistema operacional, como Linux/Mac/Windows:

escopo do modelo llamafile --modelo Qwen-Llamafile/Qwen2.5-7B-Instruct-1M-llamafile

Resultados da corrida:

 

Mais documentação está disponível em https://www.modelscope.cn/docs/models/advanced-usage/llamafile

6. ajuste fino do modelo

Aqui apresentamos o ajuste fino do Qwen/Qwen2.5-7B-Instruct-1M usando o ms-swift.

Antes de começar a fazer o ajuste fino, certifique-se de que seu ambiente esteja instalado corretamente:

# Instalando o ms-swift
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .

 

Fornecemos demonstrações e estilos de ajuste fino executáveis para conjuntos de dados personalizados, e os scripts de ajuste fino são os seguintes:

CUDA_VISIBLE_DEVICES=0

swift sft \
    --modelo Qwen/Qwen2.5-7B-Instruct-1M \
    ---train_type lora \
    --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \
             'AI-ModelScope/alpaca-gpt4-data-en#500' \
             'swift/self-cognition#500' \
    ---torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    ---target_modules all-linear \
    --gradient_accumulation_steps 16 \
    --eval_steps 50 \
    ---save_steps 50 \
    ---save_total_limit 5 \\
    --logging_steps 5 \\
    ---max_length 2048 \
    --output_dir output \\
    --warmup_ratio 0.05 \\
    --dataloader_num_workers 4 \
    ---model_author swift \
    ---model_name swift-robot

 

Uso da memória de vídeo de treinamento:

 

Formato de conjunto de dados personalizado: (basta especificá-lo diretamente usando `--dataset `)

{"messages": [{"role": "user", "content":""}, {"role": "assistant", "content":""}, {"role": "user", "content":""}]}, } {"role": "assistant", "content": ""}]}

 

Script de raciocínio:

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    ---max_new_tokens 2048

 

Empurre o modelo para o ModelScope:

CUDA_VISIBLE_DEVICES=0 swift export \
    --adapters output/vx-xxx/checkpoint-xxx \
    --push_to_hub true \
    --hub_model_id '' \
    --hub_token ''

7. o que vem a seguir?

Embora a família Qwen2.5-1M traga excelentes opções de código aberto para tarefas de processamento de sequências longas, a equipe de pesquisa está totalmente ciente de que os modelos de contexto longo ainda têm muito espaço para melhorias. Nosso objetivo é criar modelos que se sobressaiam em tarefas curtas e longas para garantir que eles sejam realmente úteis em cenários de aplicações do mundo real. Para isso, a equipe está trabalhando em métodos de treinamento mais eficientes, arquiteturas de modelos e abordagens de raciocínio para permitir a implantação eficiente e o desempenho ideal desses modelos, mesmo em ambientes com recursos limitados. A equipe está confiante de que esses esforços abrirão novas possibilidades para os modelos de contexto longo, expandindo drasticamente seu escopo de aplicação e continuando a ampliar os limites do campo.

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Qwen2.5-1M: um modelo Qwen de código aberto com suporte para 1 milhão de contextos de tokens

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil