Introdução geral
O MiniMind-V é um projeto de código aberto, hospedado no GitHub, criado para ajudar os usuários a treinar um modelo de linguagem visual (VLM) leve com apenas 26 milhões de parâmetros em menos de uma hora. Ele se baseia no modelo de linguagem MiniMind, no novo codificador visual e no módulo de projeção de recursos, com suporte para processamento conjunto de imagens e textos. O projeto fornece o código completo, desde a limpeza do conjunto de dados até a inferência do modelo, com um custo de treinamento tão baixo quanto ~RMB1,3 para uma única GPU (por exemplo, NVIDIA 3090). O MiniMind-V enfatiza a simplicidade e a facilidade de uso, com menos de 50 linhas de alterações de código, o que o torna uma ferramenta adequada para os desenvolvedores experimentarem e aprenderem sobre o processo de construção de um modelo de linguagem visual.
Lista de funções
- Fornece código de treinamento completo para modelos de linguagem visual com 26 milhões de parâmetros, suportando treinamento rápido em uma única GPU.
- Usando o codificador visual CLIP, uma imagem de 224x224 pixels foi processada para gerar 196 tokens visuais.
- Suporta a entrada de imagens únicas e múltiplas, combinadas com texto para diálogo, descrição de imagens ou perguntas e respostas.
- Contém scripts de processo completos para limpeza de conjuntos de dados, pré-treinamento e ajuste fino supervisionado (SFT).
- Fornece a implementação nativa do PyTorch, oferece suporte à aceleração de várias placas e é altamente compatível.
- Inclui download de pesos de modelos e suporta as plataformas Hugging Face e ModelScope.
- Oferece uma interface da Web e raciocínio de linha de comando para facilitar o teste dos efeitos do modelo.
- Suporte à ferramenta wandb para registrar perdas e desempenho durante o treinamento.
Usando a Ajuda
O processo de utilização do MiniMind-V inclui a configuração do ambiente, a preparação dos dados, o treinamento do modelo e o teste de efeitos. Cada etapa é descrita em detalhes abaixo para ajudar os usuários a começar rapidamente.
Configuração do ambiente
O MiniMind-V requer um ambiente Python e suporte a GPU. Veja a seguir as etapas de instalação:
- Código de clonagem
Execute o seguinte comando no terminal para fazer o download do código do projeto:git clone https://github.com/jingyaogong/minimind-v cd minimind-v
- Instalação de dependências
Ofertas de projetosrequirements.txt
que contém as bibliotecas necessárias. Execute o seguinte comando:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
Recomenda-se o Python 3.9 ou superior. Certifique-se de que o PyTorch seja compatível com CUDA (se você tiver uma GPU). Isso pode ser verificado com a execução do código a seguir:
import torch print(torch.cuda.is_available())
exportações
True
Indica que a GPU está disponível. - Download de modelos CLIP
O MiniMind-V usa o modelo CLIP (clip-vit-base-patch16
) como um codificador visual. Execute o seguinte comando para fazer o download e colocar o./model/vision_model
::git clone https://huggingface.co/openai/clip-vit-base-patch16 ./model/vision_model
Também disponível para download no ModelScope:
git clone https://www.modelscope.cn/models/openai-mirror/clip-vit-base-patch16 ./model/vision_model
- Faça o download das ponderações do modelo de idioma básico
O MiniMind-V é baseado no modelo de linguagem MiniMind, o que requer o download dos pesos do modelo de linguagem para o./out
Catálogo. Exemplo:wget https://huggingface.co/jingyaogong/MiniMind2-V-PyTorch/blob/main/lm_512.pth -P ./out
ou faça o download
lm_768.pth
dependendo da configuração do modelo.
Preparação de dados
O MiniMind-V usa cerca de 570.000 imagens de pré-treinamento e 300.000 dados de ajuste fino de comando com cerca de 5 GB de espaço de armazenamento:
- Criação de um catálogo de conjuntos de dados
No diretório raiz do projeto, crie o arquivo./dataset
Pasta:mkdir dataset
- Baixar conjunto de dados
Faça o download de um conjunto de dados do Hugging Face ou do ModelScope que contenha o*.jsonl
Dados de perguntas e respostas e*images
Dados da imagem:- Hugging Face: https://huggingface.co/datasets/jingyaogong/minimind-v_dataset
- ModelScope: https://www.modelscope.cn/datasets/gongjy/minimind-v_dataset
Faça o download e descompacte os dados da imagem para./dataset
::
unzip pretrain_images.zip -d ./dataset unzip sft_images.zip -d ./dataset
- Conjunto de dados de validação
seguro./dataset
Contém os seguintes arquivos:pretrain_vlm_data.jsonl
Dados de pré-treinamento, aproximadamente 570.000 entradas.sft_vlm_data.jsonl
Dados de ajuste fino de figura única, aproximadamente 300.000 entradas.sft_vlm_data_multi.jsonl
Dados de ajuste fino de vários mapas, aproximadamente 13.600 entradas.- Pasta Image: contém arquivos de imagem para pré-treinamento e ajuste fino.
treinamento de modelos
O treinamento do MiniMind-V é dividido em pré-treinamento e ajuste fino supervisionado, e suporta aceleração de um ou vários cartões.
- Parâmetros de configuração
compilador./model/LMConfig.py
defina os parâmetros do modelo. Exemplo:- Miniaturas:
dim=512
,n_layers=8
- Modelo médio:
dim=768
,n_layers=16
Esses parâmetros determinam o tamanho e o desempenho do modelo.
- Miniaturas:
- pré-treinamento
Execute scripts de pré-treinamento para aprender os recursos de descrição de imagens:python train_pretrain_vlm.py --epochs 4
Os pesos de saída são salvos como
./out/pretrain_vlm_512.pth
(ou768.pth
O modelo CLIP está congelado). Um único NVIDIA 3090 leva cerca de 1 hora para concluir uma época. congela o modelo CLIP e treina apenas a camada de projeção e a última camada do modelo de linguagem. - Ajuste fino supervisionado (SFT)
Ajuste fino usando pesos pré-treinados para otimizar os recursos de diálogo:python train_sft_vlm.py --epochs 4
Os pesos de saída são salvos como
./out/sft_vlm_512.pth
. Essa etapa treina a camada de projeção e o modelo de linguagem com todos os parâmetros. - Treinamento Doka (opcional)
Se você tiver N placas de vídeo, use o seguinte comando para acelerar:torchrun --nproc_per_node N train_pretrain_vlm.py --epochs 4
intercambialidade
train_pretrain_vlm.py
Para outros scripts de treinamento (por exemplotrain_sft_vlm.py
). - Monitorar o treinamento
As perdas de treinamento podem ser registradas usando o wandb:python train_pretrain_vlm.py --epochs 4 --use_wandb
Visualize dados em tempo real no site oficial da wandb.
Teste de eficácia
Após a conclusão do treinamento, o modelo pode ser testado quanto aos seus recursos de diálogo de imagem.
- raciocínio de linha de comando
Execute o seguinte comando para carregar o modelo:python eval_vlm.py --load 1 --model_mode 1
--load 1
Carregar o modelo de formato de transformadores do Hugging Face.--load 0
: De./out
Carregar pesos do PyTorch.--model_mode 1
Teste de modelos com ajuste fino;0
Teste de modelos pré-treinados.
- Teste de interface da Web
Inicie a interface da Web:python web_demo_vlm.py
entrevistas
http://localhost:8000
Carregue uma imagem e insira o texto para testar. - formato de entrada
O MiniMind-V usa 196@@@
Os espaços reservados representam uma imagem. Exemplo:@@@...@@@\n这张图片是什么内容?
Exemplo de entrada de várias imagens:
@@@...@@@\n第一张图是什么?\n@@@...@@@\n第二张图是什么?
- Faça o download dos pesos pré-treinamento
Se não estiver treinando, você pode fazer o download dos pesos oficiais diretamente:- Formato PyTorch:https://huggingface.co/jingyaogong/MiniMind2-V-PyTorch
- Formato Transformers:https://huggingface.co/collections/jingyaogong/minimind-v-67000833fb60b3a2e1f3597d
advertência
- Memória de vídeo recomendada de 24 GB (por exemplo, RTX 3090). Se a memória de vídeo for insuficiente, reduza o tamanho do lote (
batch_size
). - Garantir que o caminho do conjunto de dados esteja correto.
*.jsonl
e os arquivos de imagem precisam ser colocados na pasta./dataset
. - O congelamento dos modelos CLIP durante o treinamento reduz os requisitos aritméticos.
- Os diálogos com várias imagens têm eficácia limitada, e recomenda-se que os cenários de imagem única sejam testados prioritariamente.
cenário do aplicativo
- Aprendizagem algorítmica de IA
O MiniMind-V fornece um código de modelagem de linguagem visual conciso, adequado para que os alunos entendam os princípios de modelagem multimodal. Os usuários podem modificar o código para fazer experiências com diferentes parâmetros ou conjuntos de dados. - Prototipagem rápida
Os desenvolvedores podem criar protótipos de aplicativos de diálogo de imagem com base no MiniMind-V. Ele é leve e eficiente e é adequado para dispositivos de baixa potência de computação, como PCs ou sistemas incorporados. Ele é leve e eficiente e é adequado para dispositivos de baixa potência de computação, como PCs ou sistemas incorporados. - Ferramentas de educação e treinamento
As faculdades e universidades podem usar o MiniMind-V em cursos de IA para mostrar todo o processo de treinamento de modelos. O código é claramente comentado e adequado para a prática em sala de aula. - Experimentos de baixo custo
O custo de treinamento do projeto é baixo, adequado para equipes com orçamento limitado para testar o efeito de modelos multimodais sem a necessidade de servidores de alto desempenho.
QA
- Qual é o tamanho das imagens que o MiniMind-V suporta?
O processamento padrão é de imagens de 224x224 pixels, limitado pelo modelo CLIP. As imagens do conjunto de dados podem ser compactadas para 128x128 para economizar espaço. Modelos CLIP de resolução maior poderão ser testados no futuro. - Quanto tempo levará o treinamento?
Em um único NVIDIA 3090, uma época de pré-treinamento leva cerca de uma hora, com o ajuste fino um pouco mais rápido. O tempo exato varia de acordo com o hardware e a quantidade de dados. - Posso fazer o ajuste fino sem pré-treinamento?
Pode. Faça o download direto dos pesos oficiais de pré-treinamento e executetrain_sft_vlm.py
Ajuste fino. - Quais são os idiomas suportados?
Suporta principalmente chinês e inglês, e o efeito depende do conjunto de dados. Os usuários podem estender outros idiomas por meio de ajustes finos. - O diálogo com várias imagens funciona bem?
O recurso atual de diálogo com várias imagens é limitado, e recomenda-se que os cenários de imagem única sejam usados preferencialmente. No futuro, poderão ser feitos aprimoramentos com modelos e conjuntos de dados maiores.