Transformers documentation
Solução de problemas
Solução de problemas
Às vezes, erros ocorrem, mas estamos aqui para ajudar! Este guia aborda alguns dos problemas mais comuns que já vimos e como você pode resolvê-los. No entanto, este guia não pretende ser uma coleção abrangente de todos os problemas do 🤗 Transformers. Para obter mais ajuda na solução do seu problema, tente:
- Pedir ajuda nos fóruns. Existem categorias específicas para postar sua pergunta, como Beginners ou 🤗 Transformers. Certifique-se de escrever um post de fórum bem descritivo, com algum código reproduzível, para maximizar as chances de seu problema ser resolvido!
Crie uma Issue no repositório 🤗 Transformers se for um bug relacionado à biblioteca. Tente incluir o máximo de informações possível descrevendo o bug para nos ajudar a entender melhor o que está errado e como podemos corrigi-lo.
Consulte o guia de Migração se você usa uma versão mais antiga do 🤗 Transformers, pois algumas mudanças importantes foram introduzidas entre as versões.
Para mais detalhes sobre solução de problemas e obtenção de ajuda, consulte o Capítulo 8 do curso da Hugging Face.
Ambientes com firewall
Algumas instâncias de GPU em configurações de nuvem e intranet são protegidas por firewall contra conexões externas, o que resulta em um erro de conexão. Quando seu script tenta baixar pesos de modelo ou conjuntos de dados, o download fica pendurado e, em seguida, expira com a seguinte mensagem:
ValueError: Connection error, and we cannot find the requested files in the cached path. Please try again or make sure your Internet connection is on.
Nesse caso, você deve tentar executar o 🤗 Transformers em modo offline para evitar o erro de conexão.
CUDA sem memória suficiente
Treinar modelos grandes com milhões de parâmetros pode ser desafiador sem o hardware adequado. Um erro comum que você pode encontrar quando a GPU fica sem memória é:
CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 11.17 GiB total capacity; 9.70 GiB already allocated; 179.81 MiB free; 9.85 GiB reserved in total by PyTorch)
Aqui estão algumas soluções potenciais que você pode tentar para reduzir o uso de memória:
- Reduza o valor de per_device_train_batch_size em TrainingArguments.
- Tente usar gradient_accumulation_steps em TrainingArguments para aumentar efetivamente o tamanho total do lote.
Consulte a visão geral da otimização para mais detalhes sobre técnicas de economia de memória.
ImportError
Outro erro comum que você pode encontrar, especialmente se for um modelo recém-lançado, é ImportError:
ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location)
Para esses tipos de erro, verifique se você tem a versão mais recente do 🤗 Transformers instalada para acessar os modelos mais recentes:
pip install transformers --upgrade
Erro CUDA: assert do lado do dispositivo acionado
Às vezes, você pode se deparar com um erro genérico de CUDA relacionado a um erro no código do dispositivo.
RuntimeError: CUDA error: device-side assert triggered
Você deve tentar executar o código em uma CPU primeiro para obter uma mensagem de erro mais descritiva. Adicione a seguinte variável de ambiente no início do seu código para alternar para uma CPU:
>>> import os
>>> os.environ["CUDA_VISIBLE_DEVICES"] = ""Outra opção é obter um traceback mais detalhado da GPU. Adicione a seguinte variável de ambiente no início do seu código para que o traceback aponte para a origem do erro:
>>> import os
>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1"Saída incorreta quando os tokens de preenchimento não são mascarados
Em alguns casos, a saída hidden_state pode estar incorreta se os input_ids incluírem tokens de padding. Para demonstrar, carregue um modelo e um tokenizer. Você pode acessar o pad_token_id de um modelo para ver seu valor. O pad_token_id pode ser None em alguns modelos, mas você sempre pode defini-lo manualmente.
>>> from transformers import AutoModelForSequenceClassification
>>> import torch
>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")
>>> model.config.pad_token_id
0O exemplo a seguir mostra a saída sem mascarar os tokens de preenchimento:
>>> input_ids = torch.tensor([[7592, 2057, 2097, 2393, 9611, 2115], [7592, 0, 0, 0, 0, 0]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
[ 0.1317, -0.1683]], grad_fn=<AddmmBackward0>)Aqui está a saída real da segunda sequência:
>>> input_ids = torch.tensor([[7592]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)Na maioria dos casos, você deve fornecer um attention_mask ao seu modelo para ignorar os tokens de preenchimento e evitar esse erro silencioso. Agora, a saída da segunda sequência corresponde à sua saída real:
Por padrão, o tokenizer cria um
attention_maskpara você com base nos padrões específicos do seu tokenizer.
>>> attention_mask = torch.tensor([[1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0]])
>>> output = model(input_ids, attention_mask=attention_mask)
>>> print(output.logits)
tensor([[ 0.0082, -0.2307],
[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)🤗 Transformers não cria automaticamente uma attention_mask para mascarar um token de padding, caso ele seja fornecido, porque:
- Alguns modelos não possuem um token de padding.
- Para alguns casos de uso, os usuários desejam que o modelo preste atenção a um token de preenchimento.
ValueError: Classe de configuração XYZ não reconhecida para este tipo de AutoModel
Em geral, recomendamos usar a classe AutoModel para carregar instâncias pré-treinadas de modelos. Essa classe
pode inferir e carregar automaticamente a arquitetura correta a partir de um checkpoint específico com base na configuração. Se você vir
esse ValueError ao carregar um modelo de um checkpoint, isso significa que a classe Auto não encontrou um mapeamento da
configuração no checkpoint fornecido para o tipo de modelo que você está tentando carregar. Mais comumente, isso acontece quando um
checkpoint não suporta uma tarefa específica.
Por exemplo, você verá esse erro no exemplo a seguir porque não existe um GPT2 para question answering:
>>> from transformers import AutoProcessor, AutoModelForQuestionAnswering
>>> processor = AutoProcessor.from_pretrained("openai-community/gpt2-medium")
>>> model = AutoModelForQuestionAnswering.from_pretrained("openai-community/gpt2-medium")
ValueError: Unrecognized configuration class <class 'transformers.models.gpt2.configuration_gpt2.GPT2Config'> for this kind of AutoModel: AutoModelForQuestionAnswering.
Model type should be one of AlbertConfig, BartConfig, BertConfig, BigBirdConfig, BigBirdPegasusConfig, BloomConfig, ...