이 저장소는 Nvidia-Mainedted 유틸리티를 보유하여 Pytorch의 혼합 정밀도 및 분산 교육을 간소화합니다. 여기의 일부 코드는 결국 업스트림 Pytorch에 포함됩니다. Apex의 의도는 가능한 빨리 사용자가 최신 유틸리티를 제공하는 것입니다.
더 이상 사용되지 않았습니다. Pytorch amp를 사용하십시오
apex.amp
는 스크립트의 3 줄만 변경하여 혼합 정밀 교육을 가능하게하는 도구입니다. 사용자는 amp.initialize
에 다른 플래그를 제공하여 다른 순수하고 혼합 된 정밀 훈련 모드를 쉽게 실험 할 수 있습니다.
AMP 소개 웹 세미나 (Flag cast_batchnorm
이 keep_batchnorm_fp32
로 이름이 바뀌 었습니다).
API 문서
포괄적 인 ImageNet 예제
DCGAN 예가 곧 출시 될 예정 ...
새로운 AMP API로 이동 (더 이상 사용되지 않은 "AMP"및 "FP16_OPTIMITER"API 사용자의 경우)
apex.parallel.DistributedDataParallel
은 더 이상 사용되지 않습니다. torch.nn.parallel.DistributedDataParallel
사용하십시오
apex.parallel.DistributedDataParallel
은 torch.nn.parallel.DistributedDataParallel
과 유사한 모듈 래퍼입니다. NVIDIA의 NCCL 커뮤니케이션 라이브러리에 최적화 된 편리한 다중 프로세스 분산 교육을 가능하게합니다.
API 문서
파이썬 소스
예/연습
ImageNet 예제는 apex.amp
와 함께 apex.parallel.DistributedDataParallel
의 사용을 보여줍니다.
더 이상 사용되지 않았습니다. torch.nn.SyncBatchNorm
사용하십시오
apex.parallel.SyncBatchNorm
torch.nn.modules.batchnorm._BatchNorm
을 연장하여 동기화 된 Bn을 지원합니다. 다중 프로세스 (DistributedDataparAllel) 훈련 중에 프로세스 전체에 걸쳐 통계를 동행합니다. 동기 BN은 각 GPU에 작은 로컬 미니 배트 만 장착 할 수있는 경우에 사용되었습니다. 모든 스탯은 BN 계층의 유효 배치 크기를 모든 프로세스에서 전역 배치 크기로 증가시킵니다 (기술적으로는 올바른 공식입니다). 동기 BN은 일부 연구 모델에서 수렴 정확도를 향상시키는 것으로 관찰되었습니다.
amp
교육을 올바르게 저장하고로드하려면 amp.state_dict()
소개합니다. AMP.load_state_dict ()뿐만 아니라 모든 loss_scalers
및 해당 해당 미개한 단계가 포함 된 amp.load_state_dict()
소개하여 이러한 속성을 복원합니다.
비트 정확도를 얻으려면 다음 워크 플로를 권장합니다.
# 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
사용하여 모델을 복원하는 것이 좋습니다. 또한 amp.initialize
후 load_state_dict
메소드를 호출하는 것이 좋습니다.
각 apex.contrib
모듈에는 --cpp_ext
및 --cuda_ext
이외의 하나 이상의 설치 옵션이 필요합니다. Contrib 모듈이 반드시 안정적인 Pytorch 릴리스를 지원하지는 않습니다.
NVIDIA PYTORCH 컨테이너는 NGC : https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch에서 구입할 수 있습니다. 컨테이너에는 현재 사용 가능한 모든 사용자 정의 확장 기능이 제공됩니다.
다음과 같은 자세한 내용은 NGC 문서를 참조하십시오.
소스에서 Apex를 설치하려면 https://github.com/pytorch/pytorch에서 얻을 수있는 야간 pytorch를 사용하는 것이 좋습니다.
https://pytorch.org에서 얻을 수있는 최신 안정적인 릴리스도 작동해야합니다.
컴파일을 더 빨리 만들기 위해 Ninja
설치하는 것이 좋습니다.
성능 및 전체 기능을 위해 CUDA 및 C ++ 확장으로 Apex를 설치하는 것이 좋습니다.
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는 또한 Python 전용 빌드를 지원합니다
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를 구축 할 수 있다면 작동 할 수 있습니다. pip install -v --no-cache-dir .
일할 가능성이 높습니다.
콘다 환경에 Pytorch를 설치 한 경우 동일한 환경에 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 가 필요합니다 |