Transformers documentation
Xử lý sự cố
Xử lý sự cố
Đôi khi lỗi xảy ra, nhưng chúng tôi ở đây để hỗ trợ bạn! Hướng dẫn này bao gồm một số vấn đề phổ biến nhất mà chúng tôi đã gặp phải và cách bạn có thể khắc phục chúng. Tuy nhiên, hướng dẫn này không nhằm mục đích là một bộ sưu tập toàn diện cho mọi vấn đề của 🤗 Transformers. Để được hỗ trợ thêm trong việc khắc phục sự cố của bạn, hãy thử:
- Yêu cầu hỗ trợ trên diễn đàn. Có các chuyên mục cụ thể để bạn đăng câu hỏi, chẳng hạn như Beginners hoặc 🤗 Transformers. Hãy đảm bảo viết một bài đăng diễn đàn mô tả rõ ràng kèm theo một số mã có thể tái hiện để tối đa hóa khả năng vấn đề của bạn được giải quyết!
Tạo một Issue trên kho 🤗 Transformers nếu đó là lỗi liên quan đến thư viện. Hãy cố gắng cung cấp càng nhiều thông tin mô tả lỗi càng tốt để giúp chúng tôi xác định chính xác vấn đề và tìm cách khắc phục.
Hãy xem hướng dẫn Migration nếu bạn đang sử dụng phiên bản cũ của 🤗 Transformers vì một số thay đổi quan trọng đã được đưa ra giữa các phiên bản.
Để biết thêm chi tiết về khắc phục sự cố và nhận hỗ trợ, hãy xem Chương 8 của khóa học Hugging Face.
Môi trường có tường lửa
Một số instance GPU trong các cấu hình cloud và intranet bị chặn kết nối ra bên ngoài bởi firewall, dẫn đến lỗi kết nối. Khi script của bạn cố gắng tải xuống trọng số mô hình hoặc bộ dữ liệu, quá trình tải sẽ treo và sau đó hết thời gian chờ với thông báo sau:
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.
Trong trường hợp này, bạn nên thử chạy 🤗 Transformers ở chế độ ngoại tuyến để tránh lỗi kết nối.
Hết bộ nhớ CUDA
Việc huấn luyện các mô hình lớn với hàng triệu tham số có thể gây khó khăn nếu không có phần cứng phù hợp. Một lỗi phổ biến mà bạn có thể gặp phải khi GPU hết bộ nhớ là:
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)
Dưới đây là một số giải pháp tiềm năng bạn có thể thử để giảm mức sử dụng bộ nhớ:
- Giảm giá trị của per_device_train_batch_size trong TrainingArguments.
- Hãy thử sử dụng gradient_accumulation_steps trong TrainingArguments để tăng hiệu quả kích thước batch tổng thể.
Tham khảo tổng quan về tối ưu hóa để biết thêm chi tiết về các kỹ thuật tiết kiệm bộ nhớ.
ImportError
Một lỗi phổ biến khác mà bạn có thể gặp phải, đặc biệt nếu đó là một mô hình mới được phát hành, là ImportError:
ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location)
Đối với các loại lỗi này, hãy kiểm tra để đảm bảo bạn đã cài đặt phiên bản mới nhất của 🤗 Transformers để truy cập các mô hình mới nhất:
pip install transformers --upgrade
Lỗi CUDA: assert phía thiết bị được kích hoạt
Đôi khi bạn có thể gặp một lỗi CUDA chung chung về lỗi trong mã thiết bị.
RuntimeError: CUDA error: device-side assert triggered
Bạn nên chạy mã trên CPU trước để nhận được thông báo lỗi mô tả chi tiết hơn. Thêm biến môi trường sau vào đầu mã của bạn để chuyển sang CPU:
>>> import os
>>> os.environ["CUDA_VISIBLE_DEVICES"] = ""Một lựa chọn khác là lấy traceback chi tiết hơn từ GPU. Thêm biến môi trường sau vào đầu mã của bạn để traceback trỏ đến nguồn gốc của lỗi:
>>> import os
>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1"Đầu ra không chính xác khi các token đệm không được che
Trong một số trường hợp, kết quả hidden_state có thể không chính xác nếu input_ids chứa các token đệm. Để minh họa, hãy tải một model và tokenizer. Bạn có thể truy cập pad_token_id của model để xem giá trị của nó. pad_token_id có thể là None đối với một số model, nhưng bạn luôn có thể thiết lập thủ công.
>>> from transformers import AutoModelForSequenceClassification
>>> import torch
>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")
>>> model.config.pad_token_id
0Ví dụ sau đây cho thấy kết quả đầu ra khi không che các token đệm:
>>> 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>)Dưới đây là kết quả thực tế của chuỗi thứ hai:
>>> input_ids = torch.tensor([[7592]])
>>> output = model(input_ids)
>>> print(output.logits)
tensor([[-0.1008, -0.4061]], grad_fn=<AddmmBackward0>)Phần lớn thời gian, bạn nên cung cấp attention_mask cho mô hình của mình để bỏ qua các token đệm nhằm tránh lỗi im lặng này. Bây giờ đầu ra của chuỗi thứ hai khớp với đầu ra thực tế của nó:
Mặc định, tokenizer tạo
attention_maskcho bạn dựa trên các giá trị mặc định cụ thể của 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 không tự động tạo attention_mask để che một token padding nếu nó được cung cấp vì:
- Một số model không có token padding.
- Đối với một số trường hợp sử dụng, người dùng muốn mô hình chú ý đến token đệm.
ValueError: Không nhận diện được lớp cấu hình XYZ cho loại AutoModel này
Nhìn chung, chúng tôi khuyến nghị sử dụng lớp AutoModel để nạp các phiên bản mô hình được huấn luyện trước. Lớp này có thể tự động suy luận và nạp kiến trúc chính xác từ một checkpoint cho trước dựa trên cấu hình. Nếu bạn gặp ValueError này khi nạp mô hình từ một checkpoint, điều đó có nghĩa là lớp Auto không thể tìm thấy ánh xạ từ cấu hình trong checkpoint cho đến loại mô hình bạn đang cố gắng nạp. Phổ biến nhất, điều này xảy ra khi một checkpoint không hỗ trợ một tác vụ nhất định.
Ví dụ, bạn sẽ thấy lỗi này trong ví dụ sau vì không có GPT2 cho câu hỏi và trả lời:
>>> 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, ...