Transformers documentation

トラブルシューティング

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

トラブルシューティング

エラーが発生することがありますが、お手伝いします!このガイドでは、これまでによく見られた問題とその解決方法について説明します。ただし、このガイドは、すべての🤗 Transformersの問題を網羅するものではありません。問題のトラブルシューティングについてさらにサポートが必要な場合は、以下をお試しください:

  1. フォーラムでヘルプを求めることもできます。Beginnersや🤗 Transformersなど、質問を投稿できる特定のカテゴリがあります。問題が解決される可能性を最大限に高めるために、再現可能なコードを含む、内容が明確なフォーラム投稿を書くようにしてください。
  1. ライブラリに関連するバグの場合は、🤗 Transformers リポジトリにIssueを作成してください。何が問題で、どのように修正できるかをより正確に把握できるよう、バグを説明する情報をできるだけ多く含めてください。

  2. 古いバージョンの🤗 Transformersを使用している場合は、バージョン間で重要な変更が導入されているため、移行ガイドを確認してください。

トラブルシューティングやヘルプの受け方に関する詳細については、Hugging Face コースの第8章をご覧ください。

ファイアウォールで保護された環境

クラウド環境やイントラネット環境のGPUインスタンスでは、外部接続がファイアウォールによって遮断されている場合があり、接続エラーが発生します。スクリプトがモデルの重みやデータセットのダウンロードを試みると、ダウンロードが停止した後にタイムアウトし、以下のメッセージが表示されます。

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.

この場合、接続エラーを回避するために、🤗 Transformers をオフラインモードで実行することをお試しください。

CUDA のメモリ不足

数百万のパラメータを持つ大規模モデルの学習は、適切なハードウェアがなければ困難を伴う場合があります。GPUのメモリが不足した場合に遭遇する一般的なエラーは以下の通りです。

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)

メモリ使用量を軽減するために試せるいくつかの解決策を以下に示します。

メモリ節約技術の詳細については、最適化の概要を参照してください。

ImportError

特に新リリースのモデルでは、ImportErrorという別の一般的なエラーに遭遇する可能性があります。

ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location)

これらのエラータイプの場合、最新のモデルにアクセスできるよう、🤗 Transformers の最新バージョンがインストールされていることを確認してください。

pip install transformers --upgrade

CUDA エラー: デバイス側のアサーションがトリガーされました

汎用的な CUDA エラー、すなわちデバイスコード内のエラーに関するエラーに遭遇することがあります。

RuntimeError: CUDA error: device-side assert triggered

より詳細なエラーメッセージを取得するために、まずCPU上でコードを実行することをお勧めします。CPUに切り替えるには、コードの先頭に次の環境変数を追加してください。

>>> import os

>>> os.environ["CUDA_VISIBLE_DEVICES"] = ""

もう一つの選択肢は、GPUからより詳細なトレースバックを取得することです。エラーの原因箇所をトレースバックで特定できるようにするには、コードの先頭に以下の環境変数を追加してください。

>>> import os

>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1"

paddingトークンをマスクしていない場合の誤った出力

一部のケースでは、input_idsにパディングトークンが含まれている場合、出力のhidden_stateが正しくならない可能性があります。デモとして、モデルとトークナイザーを読み込みます。モデルのpad_token_idにアクセスすることで、その値を確認できます。pad_token_idは一部のモデルではNoneになる場合がありますが、手動で設定することは常に可能です。

>>> from transformers import AutoModelForSequenceClassification
>>> import torch

>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")
>>> model.config.pad_token_id
0

以下の例は、paddingトークンをマスクせずに出力を表示しています。

>>> 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>)

以下は、2番目のシーケンスの実際の出力です:

>>> input_ids = torch.tensor([[7592]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)

ほとんどの場合、この無言のエラーを回避するために、パディングトークンを無視するようにモデルにattention_maskを渡す必要があります。これにより、2番目のシーケンスの出力が実際の出力と一致するようになります:

デフォルトでは、tokenizer は特定の tokenizer のデフォルトに基づいて、attention_mask を作成します。

>>> 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 は、padding トークンが提供されている場合でも、それをマスクするための attention_mask を自動的に作成しません。その理由は以下の通りです。

  • 一部のモデルには、paddingトークンがありません。
  • 一部のユースケースでは、ユーザーはモデルがpaddingトークンに注意を払うことを望みます。

ValueError: この種の AutoModel に対して、設定クラス XYZ が認識されません

一般的には、事前学習済みモデルのインスタンスを読み込む際にAutoModelクラスの使用を推奨しています。このクラスは、設定に基づいて与えられたチェックポイントから正しいアーキテクチャを自動的に推論して読み込むことができます。チェックポイントからモデルを読み込む際にこのValueErrorが発生した場合、与えられたチェックポイントの設定から、読み込もうとしているモデルの種類へのマッピングをAutoクラスが見つけれなかったことを意味します。最もよくある原因は、チェックポイントが特定のタスクに対応していないことです。 例えば、質問応答用のGPT2が存在しないため、次の例ではこのエラーが表示されます。

>>> 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, ...
Update on GitHub