พื้นที่เก็บข้อมูลนี้มียูทิลิตี้ที่ได้รับการดูแลจาก NVIDIA เพื่อปรับปรุงความแม่นยำผสมและการฝึกอบรมแบบกระจายใน Pytorch บางส่วนของรหัสที่นี่จะรวมอยู่ใน Pytorch ต้นน้ำในที่สุด ความตั้งใจของ Apex คือการจัดทำยูทิลิตี้ที่ทันสมัยให้กับผู้ใช้โดยเร็วที่สุด
เลิกใช้แล้ว ใช้แอมป์ pytorch
apex.amp
เป็นเครื่องมือในการเปิดใช้งานการฝึกอบรมแบบผสมผสานโดยการเปลี่ยนสคริปต์ของคุณเพียง 3 บรรทัดเท่านั้น ผู้ใช้สามารถทดลองกับโหมดการฝึกอบรมที่มีความแม่นยำบริสุทธิ์และผสมได้อย่างง่ายดายโดยการจัดหาธงที่แตกต่างกันไปยัง amp.initialize
การสัมมนาผ่านเว็บแนะนำแอมป์ (ธง cast_batchnorm
ถูกเปลี่ยนชื่อเป็น keep_batchnorm_fp32
)
เอกสาร API
ตัวอย่าง Imagenet ที่ครอบคลุม
ตัวอย่าง dcgan เร็ว ๆ นี้ ...
ย้ายไปที่ AMP API ใหม่ (สำหรับผู้ใช้ API "AMP" และ "FP16_OPTIMIZER" ที่เลิกใช้แล้ว)
apex.parallel.DistributedDataParallel
ถูกเลิกใช้แล้ว ใช้ torch.nn.parallel.DistributedDataParallel
apex.parallel.DistributedDataParallel
เป็น wrapper โมดูลคล้ายกับ torch.nn.parallel.DistributedDataParallel
มันช่วยให้การฝึกอบรมแบบกระจายมัลติเพเซอร์ที่สะดวกสบายเหมาะสำหรับห้องสมุดการสื่อสาร NCCL ของ NVIDIA
เอกสาร API
แหล่งงูหลาม
ตัวอย่าง/คำแนะนำ
ตัวอย่าง Imagenet แสดงการใช้ apex.parallel.DistributedDataParallel
พร้อมกับ apex.amp
เลิกใช้แล้ว ใช้ torch.nn.SyncBatchNorm
apex.parallel.SyncBatchNorm
ขยาย torch.nn.modules.batchnorm._BatchNorm
เพื่อรองรับ Bn ที่ซิงโครไนซ์ มันเป็นสถิติทั้งหมดในระหว่างกระบวนการในระหว่างการฝึกอบรมหลายกระบวนการ (DistributedDataparallel) BN แบบซิงโครนัสถูกนำมาใช้ในกรณีที่มีเพียง minibatch ท้องถิ่นขนาดเล็กเท่านั้นที่สามารถพอดีกับ GPU แต่ละตัว สถิติที่ได้รับการแก้ไขเพิ่มขนาดแบทช์ที่มีประสิทธิภาพสำหรับเลเยอร์ BN ให้กับขนาดแบทช์ทั่วโลกในทุกกระบวนการ (ซึ่งในทางเทคนิคคือสูตรที่ถูกต้อง) Synchronous BN ได้รับการสังเกตเพื่อปรับปรุงความแม่นยำแบบบรรจบกันในรูปแบบการวิจัยของเรา
ในการบันทึกและโหลดการฝึกอบรม amp
ของคุณอย่างถูกต้องเราแนะนำ amp.state_dict()
ซึ่งมี loss_scalers
ทั้งหมดและขั้นตอนที่ไม่ได้ใช้งานที่สอดคล้องกันรวมถึง amp.load_state_dict()
เพื่อกู้คืนแอตทริบิวต์เหล่านี้
เพื่อให้ได้ความแม่นยำ bitwise เราขอแนะนำเวิร์กโฟลว์ต่อไปนี้:
# Initialization
opt_level = 'O1'
model , optimizer = amp . initialize ( model , optimizer , opt_level = opt_level )
# Train your model
...
with amp . scale_loss ( loss , optimizer ) as scaled_loss :
scaled_loss . backward ()
...
# Save checkpoint
checkpoint = {
'model' : model . state_dict (),
'optimizer' : optimizer . state_dict (),
'amp' : amp . state_dict ()
}
torch . save ( checkpoint , 'amp_checkpoint.pt' )
...
# Restore
model = ...
optimizer = ...
checkpoint = torch . load ( 'amp_checkpoint.pt' )
model , optimizer = amp . initialize ( model , optimizer , opt_level = opt_level )
model . load_state_dict ( checkpoint [ 'model' ])
optimizer . load_state_dict ( checkpoint [ 'optimizer' ])
amp . load_state_dict ( checkpoint [ 'amp' ])
# Continue training
...
โปรดทราบว่าเราขอแนะนำให้กู้คืนโมเดลโดยใช้ opt_level
เดียวกัน นอกจากนี้โปรดทราบว่าเราขอแนะนำให้เรียกใช้วิธี load_state_dict
หลังจาก amp.initialize
แต่ละโมดูล apex.contrib
ต้องการตัวเลือกการติดตั้งอย่างน้อยหนึ่งตัวเลือกนอกเหนือจาก --cpp_ext
และ --cuda_ext
โปรดทราบว่าโมดูล Contrib ไม่จำเป็นต้องสนับสนุนการเปิดตัว Pytorch ที่เสถียร
คอนเทนเนอร์ Nvidia Pytorch มีอยู่ใน NGC: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch คอนเทนเนอร์มาพร้อมกับส่วนขยายที่กำหนดเองทั้งหมดที่มีอยู่ในขณะนี้
ดูเอกสาร NGC สำหรับรายละเอียดเช่น:
ในการติดตั้ง Apex จากแหล่งที่มาเราขอแนะนำให้ใช้ pytorch ยามค่ำคืนที่หาได้จาก https://github.com/pytorch/pytorch
การเปิดตัวที่เสถียรล่าสุดที่หาได้จาก https://pytorch.org ควรทำงานด้วย
เราขอแนะนำให้ติดตั้ง Ninja
เพื่อให้การรวบรวมเร็วขึ้น
สำหรับประสิทธิภาพและฟังก์ชั่นเต็มรูปแบบเราขอแนะนำให้ติดตั้ง Apex ด้วยส่วนขยาย CUDA และ C ++ ผ่านทางผ่าน
git clone https://github.com/NVIDIA/apex
cd apex
# if pip >= 23.1 (ref: https://pip.pypa.io/en/stable/news/#v23-1) which supports multiple `--config-settings` with the same key...
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings " --build-option=--cpp_ext " --config-settings " --build-option=--cuda_ext " ./
# otherwise
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --global-option= " --cpp_ext " --global-option= " --cuda_ext " ./
Apex ยังรองรับการสร้างงูหลามอย่างเดียวผ่าน
pip install -v --disable-pip-version-check --no-build-isolation --no-cache-dir ./
การสร้างงูหลามอย่างเดียว:
apex.optimizers.FusedAdam
apex.normalization.FusedLayerNorm
และ apex.normalization.FusedRMSNorm
apex.parallel.SyncBatchNorm
apex.parallel.DistributedDataParallel
และ apex.amp
DistributedDataParallel
, amp
และ SyncBatchNorm
จะยังคงใช้งานได้ แต่อาจช้าลง pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" .
อาจใช้งานได้หากคุณสามารถสร้าง pytorch จากแหล่งที่มาในระบบของคุณ การสร้าง Python เท่านั้นผ่าน pip install -v --no-cache-dir .
มีแนวโน้มที่จะทำงานมากขึ้น
หากคุณติดตั้ง pytorch ในสภาพแวดล้อม conda ตรวจสอบให้แน่ใจว่าได้ติดตั้ง Apex ในสภาพแวดล้อมเดียวกันนั้น
หากความต้องการของโมดูลไม่เป็นไปตามนั้นจะไม่ถูกสร้างขึ้น
ชื่อโมดูล | ติดตั้งตัวเลือก | ผิด |
---|---|---|
apex_C | --cpp_ext | |
amp_C | --cuda_ext | |
syncbn | --cuda_ext | |
fused_layer_norm_cuda | --cuda_ext | apex.normalization |
mlp_cuda | --cuda_ext | |
scaled_upper_triang_masked_softmax_cuda | --cuda_ext | |
generic_scaled_masked_softmax_cuda | --cuda_ext | |
scaled_masked_softmax_cuda | --cuda_ext | |
fused_weight_gradient_mlp_cuda | --cuda_ext | ต้องใช้ cuda> = 11 |
permutation_search_cuda | --permutation_search | apex.contrib.sparsity |
bnp | --bnp | apex.contrib.groupbn |
xentropy | --xentropy | apex.contrib.xentropy |
focal_loss_cuda | --focal_loss | apex.contrib.focal_loss |
fused_index_mul_2d | --index_mul_2d | apex.contrib.index_mul_2d |
fused_adam_cuda | --deprecated_fused_adam | apex.contrib.optimizers |
fused_lamb_cuda | --deprecated_fused_lamb | apex.contrib.optimizers |
fast_layer_norm | --fast_layer_norm | apex.contrib.layer_norm แตกต่างจาก fused_layer_norm |
fmhalib | --fmha | apex.contrib.fmha |
fast_multihead_attn | --fast_multihead_attn | apex.contrib.multihead_attn |
transducer_joint_cuda | --transducer | apex.contrib.transducer |
transducer_loss_cuda | --transducer | apex.contrib.transducer |
cudnn_gbn_lib | --cudnn_gbn | ต้องใช้ cudnn> = 8.5, apex.contrib.cudnn_gbn |
peer_memory_cuda | --peer_memory | apex.contrib.peer_memory |
nccl_p2p_cuda | --nccl_p2p | ต้องการ nccl> = 2.10, apex.contrib.nccl_p2p |
fast_bottleneck | --fast_bottleneck | ต้องใช้ peer_memory_cuda และ nccl_p2p_cuda , apex.contrib.bottleneck |
fused_conv_bias_relu | --fused_conv_bias_relu | ต้องใช้ cudnn> = 8.4, apex.contrib.conv_bias_relu |