Transformers documentation
Công cụ cho Trainer
Công cụ cho Trainer
Trang này liệt kê tất cả các hàm tiện ích được sử dụng bởi Trainer.
Hầu hết những điều đó chỉ hữu ích nếu bạn đang nghiên cứu mã nguồn của Trainer trong thư viện.
Công cụ tiện ích
lớp transformers.EvalPrediction
< source >( predictions: numpy.ndarray | tuple[numpy.ndarray]label_ids: numpy.ndarray | tuple[numpy.ndarray]inputs: numpy.ndarray | tuple[numpy.ndarray] | None = Nonelosses: numpy.ndarray | tuple[numpy.ndarray] | None = None )
Đầu ra đánh giá (luôn chứa nhãn), dùng để tính toán các chỉ số.
lớp transformers.IntervalStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
Hàm phụ trợ cho hành vi có thể tái lập trong huấn luyện phân tán. Xem https://pytorch.org/docs/stable/notes/randomness.html cho pytorch
transformers.set_seed
< source >( seed: intdeterministic: bool = False )
Hàm phụ trợ cho hành vi có thể tái lập để đặt hạt giống trong random, numpy, torch (nếu đã cài đặt).
transformers.torch_distributed_zero_first
< source >( local_rank: int )
Decorator để tất cả các tiến trình trong huấn luyện phân tán chờ từng local_master thực hiện một thao tác.
Bên trong Callbacks
lớp transformers.trainer_callback.CallbackHandler
< source >( callbacksmodelprocessing_classoptimizerlr_scheduler )
Lớp nội bộ chỉ gọi danh sách các callback theo thứ tự.
Trình phân tích đối số của Trainer
lớp transformers.HfArgumentParser
< source >( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )
Tham số
Lớp con này của argparse.ArgumentParser sử dụng type hints trên dataclasses để tạo ra các đối số.
Lớp này được thiết kế để tương tác tốt với argparse bản địa. Cụ thể, bạn có thể thêm các đối số (không dựa trên dataclass) vào parser sau khi khởi tạo và sẽ nhận được kết quả sau khi phân tích dưới dạng một namespace bổ sung. Tùy chọn: Để tạo các nhóm đối số con, hãy sử dụng thuộc tính _argument_group_name trong dataclass.
parse_args_into_dataclasses
< source >( args = Nonereturn_remaining_strings = Falselook_for_args_file = Trueargs_filename = Noneargs_file_flag = None ) → Tuple consisting of
Tham số
- args — Danh sách các chuỗi để phân tích. Giá trị mặc định được lấy từ sys.argv. (giống như argparse.ArgumentParser)
- return_remaining_strings — Nếu là true, cũng trả về một danh sách các chuỗi đối số còn lại.
- look_for_args_file — Nếu là true, sẽ tìm tệp “.args” có tên cơ sở giống với tệp script điểm vào cho tiến trình này và sẽ thêm nội dung tiềm năng của nó vào các đối số dòng lệnh.
- args_filename — Nếu không phải None, sẽ sử dụng tệp này thay cho tệp “.args” được chỉ định trong tham số trước đó.
- args_file_flag — Nếu không phải None, sẽ tìm một tệp trong các đối số dòng lệnh được chỉ định bằng cờ này. Cờ có thể được chỉ định nhiều lần và thứ tự ưu tiên được xác định theo thứ tự (cờ cuối cùng được ưu tiên).
Trả về
Bộ ba gồm
- các instance của dataclass theo cùng thứ tự như khi chúng được truyền vào bộ khởi tạo.
- nếu có, một namespace bổ sung cho các đối số (không dựa trên dataclass) được thêm vào parser sau khi khởi tạo.
- Danh sách các chuỗi đối số còn lại có thể có. (giống như argparse.ArgumentParser.parse_known_args)
Phân tích các đối số dòng lệnh thành các thể loại của các kiểu dataclass được chỉ định.
Điều này dựa vào ArgumentParser.parse_known_args của argparse. Xem tài liệu tại:
docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args
parse_dict
< source >( args: dictallow_extra_keys: bool = False ) → Tuple consisting of
Tham số
- args (
dict) — dict chứa các giá trị cấu hình - allow_extra_keys (
bool, tùy chọn, mặc định làFalse) — Mặc định là False. Nếu là False, sẽ ném ngoại lệ nếu dict chứa các khóa không được phân tích.
Trả về
Bộ ba gồm
- các instance của dataclass theo cùng thứ tự như khi chúng được truyền vào bộ khởi tạo.
Phương thức trợ giúp thay thế không sử dụng argparse mà thay vào đó dùng một dict và điền dữ liệu vào các kiểu dataclass.
parse_json_file
< source >( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Tham số
- json_file (
strhoặcos.PathLike) — Tên tệp của tệp json cần phân tích - allow_extra_keys (
bool, tùy chọn, mặc định làFalse) — Mặc định là False. Nếu là False, sẽ ném ngoại lệ nếu tệp json chứa các khóa không được phân tích.
Trả về
Bộ ba gồm
- các instance của dataclass theo cùng thứ tự như khi chúng được truyền vào bộ khởi tạo.
Phương thức trợ giúp thay thế không sử dụng argparse mà thay vào đó tải một tệp json và điền vào các kiểu dataclass.
parse_yaml_file
< source >( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Tham số
- yaml_file (
strhoặcos.PathLike) — Tên tệp của tệp yaml cần phân tích - allow_extra_keys (
bool, tùy chọn, mặc định làFalse) — Mặc định là False. Nếu là False, sẽ ném ngoại lệ nếu tệp json chứa các khóa không được phân tích.
Trả về
Bộ ba gồm
- các instance của dataclass theo cùng thứ tự như khi chúng được truyền vào bộ khởi tạo.
Phương thức trợ giúp thay thế không sử dụng argparse mà thay vào đó tải một tệp yaml và điền vào các kiểu dataclass.
Công cụ gỡ lỗi
lớp transformers.debug_utils.DebugUnderflowOverflow
< source >( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )
Tham số
- model (
nn.Module) — Mô hình cần gỡ lỗi. - max_frames_to_save (
int, tùy chọn, mặc định là 21) — Số lượng khung hình trước đó cần ghi lại - trace_batch_nums(
list[int], tuỳ chọn, mặc định là[]) — Các số thứ tự batch cần theo dõi (tắt phát hiện) - abort_after_batch_num (`int“, optional) — Có nên hủy sau khi một số batch nhất định đã hoàn thành hay không
Lớp gỡ lỗi này giúp phát hiện và hiểu được vị trí mà mô hình bắt đầu có giá trị rất lớn hoặc rất nhỏ, và quan trọng hơn là các phần tử trọng số và kích hoạt nan hoặc inf.
Có 2 chế độ hoạt động:
- Phát hiện tràn/dưới tràn (mặc định)
- Theo dõi giá trị tuyệt đối min/max của batch cụ thể mà không có phát hiện
Chế độ 1: Phát hiện tràn dưới/tràn trên
Để kích hoạt phát hiện underflow/overflow, khởi tạo đối tượng với model:
debug_overflow = DebugUnderflowOverflow(model)
sau đó chạy huấn luyện như bình thường và nếu nan hoặc inf được phát hiện trong ít nhất một trong các phần tử trọng số, đầu vào hoặc đầu ra, module này sẽ ném ngoại lệ và in ra max_frames_to_save khung hình dẫn đến sự kiện này, mỗi khung hình báo cáo
- tên module đầy đủ kèm theo tên lớp mà
forwardcủa nó đã được thực thi - giá trị min và max tuyệt đối của tất cả các phần tử đối với trọng số của mỗi module, cũng như đầu vào và đầu ra
Ví dụ, đây là phần tiêu đề và vài khung cuối cùng trong báo cáo phát hiện cho google/mt5-small chạy ở fp16
độ chính xác hỗn hợp:
Detected inf/nan during batch_number=0
Last 21 forward frames:
abs min abs max metadata
[...]
encoder.block.2.layer.1.DenseReluDense.wi_0 Linear
2.17e-07 4.50e+00 weight
1.79e-06 4.65e+00 input[0]
2.68e-06 3.70e+01 output
encoder.block.2.layer.1.DenseReluDense.wi_1 Linear
8.08e-07 2.66e+01 weight
1.79e-06 4.65e+00 input[0]
1.27e-04 2.37e+02 output
encoder.block.2.layer.1.DenseReluDense.wo Linear
1.01e-06 6.44e+00 weight
0.00e+00 9.74e+03 input[0]
3.18e-04 6.27e+04 output
encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense
1.79e-06 4.65e+00 input[0]
3.18e-04 6.27e+04 output
encoder.block.2.layer.1.dropout Dropout
3.18e-04 6.27e+04 input[0]
0.00e+00 inf outputNhư bạn có thể thấy ở đây, T5DenseGatedGeluDense.forward đã tạo ra các kích hoạt đầu ra có giá trị tuyệt đối tối đa khoảng 62.7K, rất gần giới hạn trên 64K của fp16. Trong khung tiếp theo, chúng ta có Dropout, thành phần này đã đặt một số phần tử về 0 và sau đó chuẩn hóa lại các trọng số, khiến giá trị tuyệt đối tối đa vượt quá 64K, dẫn đến tràn số.
Như bạn có thể thấy, đó là các khung hình trước đó mà chúng ta cần xem xét khi các con số bắt đầu trở nên rất lớn đối với các số fp16.
Việc theo dõi được thực hiện trong một forward hook, được gọi ngay sau khi forward hoàn tất.
Mặc định, 21 khung hình cuối cùng sẽ được in ra. Bạn có thể thay đổi mặc định này để phù hợp với nhu cầu của mình. Ví dụ:
debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)Để xác nhận rằng bạn đã thiết lập tính năng gỡ lỗi này đúng cách và bạn có ý định sử dụng nó trong một quá trình huấn luyện có thể mất hàng giờ để hoàn thành, trước tiên hãy chạy nó với chế độ theo dõi thông thường được bật cho một vài batch, như đã giải thích trong phần tiếp theo.
Chế độ 2. Theo dõi giá trị tuyệt đối min/max cụ thể của batch mà không có phát hiện
Chế độ hoạt động thứ hai là theo dõi theo lô (per-batch) với tính năng phát hiện tràn dưới/tràn trên (underflow/overflow) được tắt.
Giả sử bạn muốn theo dõi giá trị min và max tuyệt đối của tất cả các thành phần trong mỗi lần gọi forward của
cho batch đã cho, và chỉ thực hiện điều đó với batch 1 và 3. Sau đó bạn khởi tạo class này như sau:
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3])Và bây giờ, các batch đầy đủ 1 và 3 sẽ được trace bằng cùng định dạng như đã giải thích ở trên. Các batch được đánh chỉ số bắt đầu từ 0.
Điều này hữu ích nếu bạn biết rằng chương trình bắt đầu hoạt động sai sau một số lô (batch) nhất định, để bạn có thể tua nhanh trực tiếp đến khu vực đó.
Dừng sớm:
Bạn cũng có thể chỉ định số lô (batch) sau đó sẽ dừng quá trình huấn luyện, bằng cách sử dụng :
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3)Tính năng này chủ yếu hữu ích trong chế độ theo dõi (tracing), nhưng bạn có thể sử dụng nó cho bất kỳ chế độ nào.
Hiệu năng:
Vì module này đo min/`max tuyệt đối của từng trọng số của mô hình ở mỗi bước forward, nó sẽ làm chậm quá trình huấn luyện. Do đó, hãy nhớ tắt nó đi khi đã đáp ứng đủ nhu cầu gỡ lỗi.