SageMaker 모델 병렬 라이브러리 v2 참조 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SageMaker 모델 병렬 라이브러리 v2 참조

다음은 SageMaker 모델 병렬 라이브러리 v2 (SMPv2) 에 대한 참조입니다.

SMPv2 핵심 기능 구성 매개변수

다음은 활성화 및 구성에 필요한 전체 매개변수 목록입니다 SageMaker 모델 병렬 처리 라이브러리 v2의 핵심 기능. 이들은 JSON 형식으로 작성하여 SageMaker Python으로 PyTorch 추정기에 SDK 전달하거나 JSON 파일로 저장해야 합니다. SageMaker HyperPod

{ "hybrid_shard_degree": Integer, "sm_activation_offloading": Boolean, "activation_loading_horizon": Integer, "fsdp_cache_flush_warnings": Boolean, "allow_empty_shards": Boolean, "tensor_parallel_degree": Integer, "context_parallel_degree": Integer, "expert_parallel_degree": Integer, "random_seed": Integer }
  • hybrid_shard_degree(정수) — 샤딩된 병렬 처리 정도를 지정합니다. 값은 ~와 사이의 정수여야 합니다. 0 world_size 기본값은 0입니다.

    • 로 설정하면 이 0 값이 1인 경우 네이티브 PyTorch 구현과 API 스크립트의 기본 구현으로 tensor_parallel_degree 대체됩니다. 그렇지 않으면 tensor_parallel_degreeworld_sizehybrid_shard_degree 기준으로 가능한 가장 큰 값을 계산합니다. 기본 PyTorch FSDP 사용 사례로 돌아가서 사용하는 FULL_SHARD 전략이 있다면 전체 클러스터에 걸쳐 분할됩니다. GPUs HYBRID_SHARD또는 _HYBRID_SHARD_ZERO2 전략이었다면 이는 hybrid_shard_degree 8과 같습니다. 텐서 병렬화가 활성화되면 수정된 값을 기반으로 샤딩됩니다. hybrid_shard_degree

    • 로 설정하면 네이티브 PyTorch 구현으로 폴백되고1, 이 1인 경우 NO_SHARD 스크립트에서는 API for를 사용합니다. tensor_parallel_degree 그렇지 않으면 주어진 텐서 병렬 그룹 NO_SHARD 내와 동일합니다.

    • 2에서 사이의 정수로 설정하면 지정된 개수만큼 샤딩이 발생합니다. world_size GPUs sharding_strategyFSDP스크립트에서 설정하지 않으면 로 재정의됩니다. HYBRID_SHARD 설정하면 _HYBRID_SHARD_ZERO2 sharding_strategy 지정한 내용이 사용됩니다.

  • sm_activation_offloading(Boolean) — SMP 활성화 오프로딩 구현을 활성화할지 여부를 지정합니다. IfFalse, 오프로딩은 기본 구현을 사용합니다. PyTorch TrueIf는 SMP 활성화 오프로딩 구현을 사용합니다. 또한 스크립트에서 PyTorch 활성화 오프로드 래퍼 (torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper) 를 사용해야 합니다. 자세한 내용은 활성화 오프로딩을 참조하십시오. 기본값은 True입니다.

  • activation_loading_horizon(정수) — 활성화 오프로딩 대상 지평선 유형을 지정하는 정수입니다. FSDP 입력이 동시에 메모리에 저장될 수 있는 체크포인트 또는 오프로드 레이어의 최대 수입니다. GPU 자세한 내용은 활성화 오프로딩을 참조하십시오. 입력 값은 양의 정수여야 합니다. 기본값은 2입니다.

  • fsdp_cache_flush_warnings(Boolean) - PyTorch 메모리 관리자에서 캐시 플러시가 발생할 경우 계산 성능을 저하시킬 수 있으므로 이를 감지하여 경고합니다. 기본값은 True입니다.

  • allow_empty_shards(Boolean) — 텐서를 나눌 수 없는 경우 텐서를 샤딩할 때 빈 샤드를 허용할지 여부입니다. 이는 특정 시나리오에서 체크포인트 실행 중 크래시가 발생하는 문제를 실험적으로 수정한 것입니다. 이 기능을 비활성화하면 원래 동작으로 돌아갑니다. PyTorch 기본값은 False입니다.

  • tensor_parallel_degree(정수) — 텐서 병렬 처리 정도를 지정합니다. 값은 ~와 사이여야 합니다. 1 world_size 기본값은 1입니다. 참고로 1보다 큰 값을 전달하면 컨텍스트 병렬화가 자동으로 활성화되지 않습니다. 학습 스크립트에서 모델을 torch.sagemaker.transform API 래핑할 때도 를 사용해야 합니다. 자세한 내용은 텐서 병렬화을 참조하십시오.

  • context_parallel_degree(정수) — 컨텍스트 병렬화 정도를 지정합니다. 값은 에서 사이의 값이어야 1 하며world_size, 0이어야 합니다. <= hybrid_shard_degree 기본값은 1입니다. 참고로 1보다 큰 값을 전달하면 컨텍스트 병렬화가 자동으로 활성화되지 않으므로 훈련 스크립트에서 모델을 torch.sagemaker.transform API 래핑할 때도 를 사용해야 합니다. 자세한 내용은 컨텍스트 병렬 처리을 참조하십시오.

  • expert_parallel_degree(정수) — 전문가 병렬 처리 수준을 지정합니다. 값은 1에서 1 사이여야 합니다. world_size 기본값은 1입니다. 참고로 1보다 큰 값을 전달하면 컨텍스트 병렬화가 자동으로 활성화되지 않으므로 훈련 스크립트에서 모델을 torch.sagemaker.transform API 래핑할 때도 를 사용해야 합니다. 자세한 내용은 전문가 병렬 처리을 참조하십시오.

  • random_seed(정수) — SMP 텐서 병렬 처리 또는 전문가 병렬 처리에 의한 분산 모듈의 임의 연산의 시드 번호입니다. 이 시드는 텐서 병렬 또는 전문가 병렬 랭크에 추가되어 각 랭크의 실제 시드를 설정합니다. 텐서 병렬 및 전문가 병렬 순위마다 고유합니다. SMPv2는 텐서 병렬 및 전문가 병렬 순위에서 생성된 난수가 각각 및 케이스와 일치하는지 확인합니다. non-tensor-parallelism non-expert-parallelism

v2 패키지에 SMP 대한 레퍼런스 torch.sagemaker

이 섹션은 SMP v2에서 제공하는 torch.sagemaker 패키지에 대한 참조입니다.

torch.sagemaker.delayed_param.DelayedParamIniter

PyTorch모델에 지연된 파라미터 초기화 적용하기 API 위한 것입니다.

class torch.sagemaker.delayed_param.DelayedParamIniter( model: nn.Module, init_method_using_config : Callable = None, verbose: bool = False, )

Parameters

  • model(nn.Module) — SMP v2의 지연된 파라미터 초기화 기능을 래핑하고 적용하는 PyTorch 모델입니다.

  • init_method_using_config(호출 가능) — SMP v2 또는 지원되는 SMP 텐서 병렬 처리와 호환되는 Hugging Face Transformer 모델 tensor parallel 구현을 사용하는 경우 이 매개변수를 기본값인 인 으로 유지하십시오. None 기본적으로 는 주어진 모델을 올바르게 초기화하는 방법을 DelayedParamIniter API 찾습니다. 다른 모델의 경우 사용자 지정 매개 변수 초기화 함수를 만들어 스크립트에 추가해야 합니다. 다음 코드 스니펫은 SMP v2가 를 위해 구현한 기본 init_method_using_config 함수입니다. SMP 텐서 병렬 처리와 호환되는 Hugging Face Transformer 모델 다음 코드 스니펫을 참조로 사용하여 고유한 초기화 구성 함수를 만들고 스크립트에 추가하고 의 매개 변수에 전달할 수 있습니다. init_method_using_config SMP DelayedParamIniter API

    from torch.sagemaker.utils.module_utils import empty_module_params, move_buffers_to_device # Define a custom init config function. def custom_init_method_using_config(module): d = torch.cuda.current_device() empty_module_params(module, device=d) if isinstance(module, (nn.Linear, Conv1D)): module.weight.data.normal_(mean=0.0, std=config.initializer_range) if module.bias is not None: module.bias.data.zero_() elif isinstance(module, nn.Embedding): module.weight.data.normal_(mean=0.0, std=config.initializer_range) if module.padding_idx is not None: module.weight.data[module.padding_idx].zero_() elif isinstance(module, nn.LayerNorm): module.weight.data.fill_(1.0) module.bias.data.zero_() elif isinstance(module, LlamaRMSNorm): module.weight.data.fill_(1.0) move_buffers_to_device(module, device=d) delayed_initer = DelayedParamIniter(model, init_method_using_config=custom_init_method_using_config)

    위 코드 스니펫의 torch.sagemaker.module_util 함수에 대한 자세한 내용은 을 참조하십시오. torch.sagemaker유틸리티 함수 및 속성

  • verbose(Boolean) — 초기화 및 유효성 검사 중에 더 자세한 로깅을 활성화할지 여부입니다. 기본값은 False입니다.

메서드

  • get_param_init_fn()— PyTorch FSDP 래퍼 클래스의 param_init_fn 인수에 전달할 수 있는 매개 변수 초기화 함수를 반환합니다.

  • get_post_param_init_fn()— 래퍼 클래스의 post_param_init_fn 인수에 전달할 수 있는 매개 변수 초기화 함수를 반환합니다. PyTorch FSDP 이는 모델에서 가중치를 묶었을 때 필요합니다. 모델은 메서드를 tie_weights 구현해야 합니다. 자세한 내용은 동점 중량에 대한 참고 사항을 참조하십시오지연된 파라미터 초기화.

  • count_num_params(module: nn.Module, *args: Tuple[nn.Parameter]) — 매개 변수 초기화 함수로 초기화되는 매개 변수 수를 추적합니다. 이는 다음 validate_params_and_buffers_inited 메서드를 구현하는 데 도움이 됩니다. 메서드가 백엔드에서 이 validate_params_and_buffers_inited 메서드를 암시적으로 호출하기 때문에 일반적으로 이 함수를 명시적으로 호출할 필요는 없습니다.

  • validate_params_and_buffers_inited(enabled: bool=True) — 초기화된 매개 변수 수가 모델의 총 매개 변수 수와 일치하는지 확인하는 데 도움이 되는 컨텍스트 관리자입니다. 또한 모든 매개변수와 버퍼가 이제 메타 GPU 장치 대신 장치에 있는지 확인합니다. 이러한 조건이 AssertionErrors 충족되지 않으면 오류가 발생합니다. 이 컨텍스트 관리자는 선택사항일 뿐이며 이 컨텍스트 관리자를 사용하여 매개변수를 초기화할 필요는 없습니다.

torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save

비동기 API 저장을 위한 항목입니다. 이 메서드를 사용하여 지정된 항목에 state_dict 비동기적으로 저장합니다. checkpoint_id

def async_save( state_dict: STATE_DICT_TYPE, *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_writer: Optional[StorageWriter] = None, planner: Optional[SavePlanner] = None, process_group: Optional[dist.ProcessGroup] = None, coordinator_rank: int = 0, queue : AsyncCallsQueue = None, sharded_strategy: Union[SaveShardedStrategy, Tuple[str, int], None] = None, wait_error_handling: bool = True, force_check_all_plans: bool = True, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:

Parameters

  • state_dict(dict) - 필수입니다. 저장해야 할 주 딕셔너리.

  • checkpoint_id(str) - 필수. 체크포인트를 저장할 스토리지 경로.

  • storage_writer(StorageWriter) - 선택 사항입니다. 쓰기 작업을 PyTorch 수행하기 위한 StorageWriterin의 인스턴스입니다. 이를 지정하지 않는 경우 기본 구성 StorageWriter이 사용됩니다.

  • planner(SavePlanner) - 선택 사항. SavePlannerin의 인스턴스 PyTorch. 이를 지정하지 않는 경우 기본 SavePlanner구성이 사용됩니다.

  • process_group(ProcessGroup) - 선택 사항. 작업할 프로세스 그룹. 경우None, 기본 (글로벌) 프로세스 그룹이 사용됩니다.

  • coordinator_rank(int) - 선택 사항입니다. 다음과 같은 AllReduce 집단 통신 사업자를 수행할 때 코디네이터의 직급.

  • queue(AsyncRequestQueue) - 선택 사항. 사용할 비동기 스케줄러입니다. 기본적으로 글로벌 파라미터를 사용합니다. DEFAULT_ASYNC_REQUEST_QUEUE

  • sharded_strategy(PyTorchDistSaveShardedStrategy) - 선택 사항입니다. 체크포인트를 저장하는 데 사용할 샤딩 전략. 이 값이 지정되지 않은 경우 torch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy 기본적으로 사용됩니다.

  • wait_error_handling(bool) - 선택 사항입니다. 모든 랭크가 오류 처리를 완료할 때까지 기다릴지 여부를 지정하는 플래그입니다. 기본값은 True입니다.

  • force_check_all_plans(bool) - 선택 사항입니다. 캐시 적중 시에도 순위 간 계획을 강제로 동기화할지 여부를 결정하는 플래그입니다. 기본값은 True입니다.

  • s3_region(str) - 선택 사항입니다. S3 버킷이 위치한 지역. 지정하지 않으면 에서 리전이 유추됩니다. checkpoint_id

  • s3client_config(S3ClientConfig) - 선택 사항입니다. S3 클라이언트의 구성 가능한 파라미터를 노출하는 데이터 클래스. 제공되지 않을 경우 S3의 기본 구성이 사용됩니다. ClientConfig part_size파라미터는 기본적으로 64MB로 설정됩니다.

torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls

이 함수를 사용하면 학습 프로세스에서 수행할 여러 비동기 요청을 모니터링할 수 있습니다.

def maybe_finalize_async_calls( blocking=True, process_group=None ) -> List[int]:

Parameters

  • blocking(bool) - 선택 사항입니다. True인 경우 모든 활성 요청이 완료될 때까지 대기합니다. 그렇지 않으면 이미 완료된 비동기 요청만 종료됩니다. 기본값은 True입니다.

  • process_group() - 선택 사항입니다. ProcessGroup 작업할 프로세스 그룹입니다. 로 None 설정하면 기본 (글로벌) 프로세스 그룹이 사용됩니다.

반환 값

  • 비동기 호출 색인이 포함된 목록이 성공적으로 마무리되었습니다.

torch.sagemaker.distributed.checkpoint.state_dict_saver.save

이 메서드를 사용하여 지정된 항목에 동기적으로 저장합니다. state_dict checkpoint_id

def save( state_dict: STATE_DICT_TYPE, *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_writer: Optional[StorageWriter] = None, planner: Optional[SavePlanner] = None, process_group: Optional[dist.ProcessGroup] = None, coordinator_rank: int = 0, wait_error_handling: bool = True, force_check_all_plans: bool = True, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:

Parameters

  • state_dict(dict) - 필수. 저장해야 할 주 딕셔너리.

  • checkpoint_id(str) - 필수. 체크포인트를 저장할 스토리지 경로.

  • storage_writer(StorageWriter) - 선택 사항입니다. 쓰기 작업을 PyTorch 수행하기 위한 StorageWriterin의 인스턴스입니다. 이를 지정하지 않는 경우 기본 구성 StorageWriter이 사용됩니다.

  • planner(SavePlanner) - 선택 사항. SavePlannerin의 인스턴스 PyTorch. 이를 지정하지 않는 경우 기본 SavePlanner구성이 사용됩니다.

  • process_group(ProcessGroup) - 선택 사항. 작업할 프로세스 그룹. 경우None, 기본 (글로벌) 프로세스 그룹이 사용됩니다.

  • coordinator_rank(int) - 선택 사항입니다. 다음과 같은 AllReduce 집단 통신 사업자를 수행할 때 코디네이터의 직급.

  • wait_error_handling(bool) - 선택 사항입니다. 모든 랭크가 오류 처리를 완료할 때까지 기다릴지 여부를 지정하는 플래그입니다. 기본값은 True입니다.

  • force_check_all_plans(bool) - 선택 사항입니다. 캐시 적중 시에도 순위 간 계획을 강제로 동기화할지 여부를 결정하는 플래그입니다. 기본값은 True입니다.

  • s3_region(str) - 선택 사항입니다. S3 버킷이 위치한 지역. 지정하지 않으면 에서 리전이 유추됩니다. checkpoint_id

  • s3client_config(S3ClientConfig) - 선택 사항입니다. S3 클라이언트의 구성 가능한 파라미터를 노출하는 데이터 클래스. 제공되지 않을 경우 S3의 기본 구성이 사용됩니다. ClientConfig part_size파라미터는 기본적으로 64MB로 설정됩니다.

torch.sagemaker.distributed.checkpoint.state_dict_loader.load

분산 모델의 상태 사전을 로드합니다 (state_dict).

def load( state_dict: Dict[str, Any], *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_reader: Optional[StorageReader] = None, planner: Optional[LoadPlanner] = None, process_group: Optional[dist.ProcessGroup] = None, check_keys_matched: bool = True, coordinator_rank: int = 0, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:

Parameters

  • state_dict(dict) - 필수. state_dict로드하려면

  • checkpoint_id(str) - 필수입니다. 체크포인트의 ID. 의 의미는 스토리지에 checkpoint_id 따라 다릅니다. 폴더 또는 파일 경로일 수 있습니다. 스토리지가 키-값 저장소인 경우에도 키가 될 수 있습니다.

  • storage_reader(StorageReader) - 선택 사항입니다. 읽기 작업을 PyTorch 수행하기 위한 StorageReaderin의 인스턴스입니다. 지정하지 않을 경우 분산 체크포인트는 를 기반으로 판독기를 자동으로 추론합니다. checkpoint_id 또한 checkpoint_id None 그럴 경우 예외 오류가 발생합니다.

  • planner(StorageReader) - 선택 사항입니다. LoadPlannerin의 인스턴스 PyTorch. 지정하지 않는 경우 기본 LoadPlanner구성이 사용됩니다.

  • check_keys_matched(bool) - 선택 사항입니다. 활성화된 경우 를 사용하여 모든 랭크의 state_dict 키가 일치하는지 확인합니다. AllGather

  • s3_region(str) - 선택 사항입니다. S3 버킷이 위치한 지역. 지정하지 않으면 에서 리전이 유추됩니다. checkpoint_id

  • s3client_config(S3ClientConfig) - 선택 사항입니다. S3 클라이언트의 구성 가능한 파라미터를 노출하는 데이터 클래스. 제공되지 않을 경우 S3의 기본 구성이 사용됩니다. ClientConfig part_size파라미터는 기본적으로 64MB로 설정됩니다.

torch.sagemaker.moe.moe_config.MoEConfig

전문가 혼합 (SMPMoE) 구현을 설정하기 위한 구성 클래스입니다. 이 클래스를 통해 MoE 구성 값을 지정하고 호출에 전달할 수 있습니다. torch.sagemaker.transformAPI 이 클래스를 사용하여 MoE 모델을 학습시키는 방법에 대해 자세히 알아보려면 을 참조하십시오전문가 병렬 처리.

class torch.sagemaker.moe.moe_config.MoEConfig( smp_moe=True, random_seed=12345, moe_load_balancing="sinkhorn", global_token_shuffle=False, moe_all_to_all_dispatcher=True, moe_aux_loss_coeff=0.001, moe_z_loss_coeff=0.001 )

Parameters

  • smp_moe(Boolean) - MoE의 SMP -구현을 사용할지 여부. 기본값은 True입니다.

  • random_seed(정수) - 전문가 병렬 분산 모듈의 임의 연산의 시드 번호입니다. 이 시드는 전문가 병렬 순위에 추가되어 각 순위의 실제 시드를 설정합니다. 각 전문가 Parallel 랭크마다 고유합니다. 기본값은 12345입니다.

  • moe_load_balancing(문자열) - MoE 라우터의 부하 분산 유형을 지정합니다. 유효한 옵션은aux_loss, sinkhornbalanced, 및 none 입니다. 기본값은 sinkhorn입니다.

  • global_token_shuffle(Boolean) - 동일한 EP 그룹 내 EP 랭크 간에 토큰을 셔플할지 여부입니다. 기본값은 False입니다.

  • moe_all_to_all_dispatcher(Boolean) - MoE 통신에 all-to-all 디스패처를 사용할지 여부입니다. 기본값은 True입니다.

  • moe_aux_loss_coeff(Float) - 보조 부하 분산 손실에 대한 계수입니다. 기본값은 0.001입니다.

  • moe_z_loss_coeff(플로트) - z-손실 계수. 기본값은 0.001입니다.

torch.sagemaker.nn.attn.FlashSelfAttention

v2와 함께 사용하기 API FlashAttention 위한 것입니다. SMP

class torch.sagemaker.nn.attn.FlashSelfAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, triton_flash_attention: bool = False, use_alibi: bool = False, )

Parameters

  • attention_dropout_prob(플로트) — 집중력에 적용할 수 있는 탈락 확률. 기본값은 0.0입니다.

  • scale(float) — 이 배율을 통과하면 소프트맥스에 이 스케일링 팩터가 적용됩니다. None(기본값이기도 함) 로 설정된 경우 스케일 팩터는 입니다. 1 / sqrt(attention_head_size) 기본값은 None입니다.

  • triton_flash_attention(bool) — 전달되면 트리톤의 플래시 어텐션 구현이 사용됩니다. 이는 선형 편향 (ALiBi) 을 통한 주의력을 지원하는 데 필요합니다 (다음 use_alibi 파라미터 참조). 이 버전의 커널은 드롭아웃을 지원하지 않습니다. 기본값은 False입니다.

  • use_alibi(bool) — 전달되면 제공된 마스크를 사용하여 선형 바이어스를 통한 주의 (ALiBi) 가 활성화됩니다. 사용 ALiBi 시에는 다음과 같이 준비한 주의 마스크가 필요합니다. 기본값은 False입니다.

    def generate_alibi_attn_mask(attention_mask, batch_size, seq_length, num_attention_heads, alibi_bias_max=8): device, dtype = attention_mask.device, attention_mask.dtype alibi_attention_mask = torch.zeros( 1, num_attention_heads, 1, seq_length, dtype=dtype, device=device ) alibi_bias = torch.arange(1 - seq_length, 1, dtype=dtype, device=device).view( 1, 1, 1, seq_length ) m = torch.arange(1, num_attention_heads + 1, dtype=dtype, device=device) m.mul_(alibi_bias_max / num_attention_heads) alibi_bias = alibi_bias * (1.0 / (2 ** m.view(1, num_attention_heads, 1, 1))) alibi_attention_mask.add_(alibi_bias) alibi_attention_mask = alibi_attention_mask[..., :seq_length, :seq_length] if attention_mask is not None and attention_mask.bool().any(): alibi_attention_mask.masked_fill( attention_mask.bool().view(batch_size, 1, 1, seq_length), float("-inf") ) return alibi_attention_mask

방법

  • forward(self, qkv, attn_mask=None, causal=False, cast_dtype=None, layout="b h s d")— 일반 PyTorch 모듈 함수. module(x)a가 호출되면 이 함수가 자동으로 SMP 실행됩니다.

    • qkvtorch.Tensor 다음과 같은 형식: (batch_size x seqlen x (3 x num_heads) x head_size) 또는(batch_size, (3 x num_heads) x seqlen x head_size), torch.Tensors 각각 모양이 다른 튜플(batch_size x seqlen x num_heads x head_size), 또는(batch_size x num_heads x seqlen x head_size). 셰이프를 기반으로 적절한 레이아웃 인수를 전달해야 합니다.

    • attn_masktorch.Tensor 다음 형식(batch_size x 1 x 1 x seqlen). 이 어텐션 마스크 파라미터를 활성화하려면 triton_flash_attention=True 및 이 파라미터가 필요합니다use_alibi=True. 이 방법을 사용하여 어텐션 마스크를 생성하는 방법을 알아보려면 의 코드 예제를 참조하십시오FlashAttention. 기본값은 None입니다.

    • causal— 인수의 디폴트 False 값인 로 설정하면 마스크가 적용되지 않습니다. 로 True 설정하면 forward 메서드는 표준 하부 삼각 마스크를 사용합니다. 기본값은 False입니다.

    • cast_dtype— 특정 dtype 값으로 설정하면 qkv 텐서를 이전 위치로 캐스팅합니다. dtype attn 이는 로터리 임베딩이 있거나 로터리 임베딩이 적용된 Hugging Face GPT Transformer -NEOx 모델과 같은 구현에 유용합니다. q k fp32 로 설정하면 None 캐스트가 적용되지 않습니다. 기본값은 None입니다.

    • layout(문자열) — 사용 가능한 값은 b h s d 또는 b s h d 입니다. 적절한 변환을 적용할 수 있도록 전달된 qkv 텐서의 레이아웃으로 설정해야 합니다. attn 기본값은 b h s d입니다.

반환 값

모양이 있는 싱글torch.Tensor. (batch_size x num_heads x seq_len x head_size)

torch.sagemaker.nn.attn.FlashGroupedQueryAttention

FlashGroupedQueryAttentionSMPv2와 함께 사용하기 API 위한 것입니다. 사용법에 대한 자세한 내용은 API 을 참조하십시오그룹화된 쿼리 주의에 FlashAttention 커널 사용.

class torch.sagemaker.nn.attn.FlashGroupedQueryAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, )

Parameters

  • attention_dropout_prob(플로트) — 집중력에 적용할 수 있는 탈락 확률. 기본값은 0.0입니다.

  • scale(float) — 이 배율을 통과하면 소프트맥스에 이 스케일링 팩터가 적용됩니다. 로 설정하면 None 스케일링 팩터로 1 / sqrt(attention_head_size) 사용됩니다. 기본값은 None입니다.

메서드

  • forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")— 일반 PyTorch 모듈 함수. module(x)a가 호출되면 이 함수가 자동으로 SMP 실행됩니다.

    • qtorch.Tensor 다음 형식 (batch_size x seqlen x num_heads x head_size) 또는(batch_size x num_heads x seqlen x head_size). 모양에 따라 적절한 레이아웃 인수를 전달해야 합니다.

    • kvtorch.Tensor 다음과 같은 형식의 (batch_size x seqlen x (2 x num_heads) x head_size) or 또는 (batch_size, (2 x num_heads) x seqlen x head_size)torch.Tensor 개의 튜플이며, 각 형식은 또는 (batch_size x seqlen x num_heads x head_size) 형태일 수 있습니다. (batch_size x num_heads x seqlen x head_size) 또한 셰이프를 기반으로 적절한 layout 인수를 전달해야 합니다.

    • causal— 인수의 False 기본값인 로 설정하면 마스크가 적용되지 않습니다. 로 True 설정하면 forward 메서드는 표준 하부 삼각 마스크를 사용합니다. 기본값은 False입니다.

    • cast_dtype— 특정 dtype으로 설정하면 qkv 텐서가 이전의 해당 dtype으로 캐스팅됩니다. attn 이는 애프터 로터리 임베딩이 있는 Hugging Face Transformer GPT -NEOx와 같은 구현에 유용합니다. q,k fp32None 설정하면 캐스트가 적용되지 않습니다. 기본값은 None입니다.

    • 레이아웃 (문자열) — 사용 가능한 값은 "b h s d" 또는 "b s h d" 입니다. 적절한 변환을 적용할 수 있도록 전달된 qkv 텐서의 레이아웃으로 설정해야 합니다. attn 기본값은 "b h s d"입니다.

반환 값

어텐션 계산의 출력을 torch.Tensor (batch_size x num_heads x seq_len x head_size) 나타내는 싱글을 반환합니다.

torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention

라마 API 모델을 FlashAttention 지원하는 앱입니다. 이것은 낮은 torch.sagemaker.nn.attn.FlashGroupedQueryAttention API 레벨에서 를 API 사용합니다. 사용 방법을 알아보려면 을 참조하십시오그룹화된 쿼리 주의에 FlashAttention 커널 사용.

class torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention( config: LlamaConfig )

Parameters

  • config— 라마 모델의 FlashAttention 구성.

메서드

  • forward(self, hidden_states, attention_mask, position_ids, past_key_value, output_attentions, use_cache)

    • hidden_states(torch.Tensor) — 텐서 형태의 (batch_size x seq_len x num_heads x head_size) 숨겨진 상태.

    • attention_mask(torch.LongTensor) — 의 형태로 토큰 인덱스를 패딩할 때 주의를 기울이지 않도록 마스크합니다. (batch_size x seqlen) 기본값은 None입니다.

    • position_ids(torch.LongTensor) — 존재하지 않을 때는 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스를 나타내는 형태로 나타납니다. None (batch_size x seqlen) 기본값은 None입니다.

    • past_key_value(캐시) — 미리 계산된 숨겨진 상태 (자기 주의 블록 및 교차 주의 블록의 키와 값). 기본값은 None입니다.

    • output_attentions(bool) — 모든 어텐션 레이어의 어텐서를 반환할지 여부를 나타냅니다. 기본값은 False입니다.

    • use_cache(bool) — 키 값 상태를 past_key_values 반환할지 여부를 나타냅니다. 기본값은 False입니다.

반환 값

주의력 계산 결과를 torch.Tensor (batch_size x num_heads x seq_len x head_size) 나타내는 싱글을 반환합니다.

torch.sagemaker.transform

SMPv2는 Hugging Face Transformer 모델을 SMP 모델 구현으로 변환하고 텐서 병렬 처리를 활성화하기 torch.sagemaker.transform() API 위해 이를 제공합니다. SMP

torch.sagemaker.transform( model: nn.Module, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None, config: Optional[Dict] = None, load_state_dict_from_rank0: bool = False )

SMPv2는 Hugging Face Transformer 모델의 컨피그레이션을 트랜스포머 컨피그레이션으로 변환하여 에 SMP 대한 변환 정책을 유지합니다. SMP 텐서 병렬 처리와 호환되는 Hugging Face Transformer 모델

Parameters

  • model(torch.nn.Module) — SMP 텐서 병렬 처리와 호환되는 Hugging Face Transformer 모델 라이브러리의 텐서 병렬 처리 기능을 변환하고 적용하는 모델입니다. SMP

  • device(torch.device) — 통과하면 이 기기에 새 모델이 생성됩니다. 원본 모듈에 메타 기기에 매개변수가 있는 경우 (참조지연된 파라미터 초기화), 여기에 전달된 인수를 무시하고 변환된 모듈도 메타 기기에 생성됩니다. 기본값은 None입니다.

  • dtype(torch.dtype) — 전달되면 이를 모델 생성을 위한 dtype 컨텍스트 관리자로 설정하고 이 dtype으로 모델을 생성합니다. 를 사용할 fp32 MixedPrecision 때 모델을 만들려고 하기 때문에 이 방법은 일반적으로 불필요하며 기본 fp32 dtype입니다. PyTorch 기본값은 None입니다.

  • config(dict) — 트랜스포머 구성을 위한 딕셔너리입니다. SMP 기본값은 None입니다.

  • load_state_dict_from_rank0(Boolean) — 기본적으로 이 모듈은 새 가중치를 사용하여 모델의 새 인스턴스를 만듭니다. 이 인수가 로 True 설정되면 0 순위의 원래 PyTorch 모델의 상태 사전을 0 순위가 속한 텐서 병렬 그룹에 대한 변환된 모델로 SMP 로드하려고 시도합니다. 이 값을 로 True 설정하면 랭크 0은 메타 기기에서 어떠한 매개변수도 가질 수 없습니다. 첫 번째 텐서 병렬 그룹만 이 변환 호출 후 0번째 랭크의 가중치를 채웁니다. 첫 번째 텐서 병렬 그룹에서 sync_module_states 다른 True 모든 프로세스로 이러한 가중치를 가져오려면 FSDP 래퍼에서 로 설정해야 합니다. 이 기능이 활성화되면 SMP 라이브러리는 원본 모델에서 상태 사전을 로드합니다. SMP라이브러리는 변환 전에 모델을 가져와 변환된 state_dict 모델의 구조와 일치하도록 변환하고, 각 텐서 병렬 랭크별로 분할하고, 0번째 랭크의 이 상태를 0번째 랭크가 속한 텐서 병렬 그룹의 다른 랭크로 전달하고 로드합니다. 기본값은 False입니다.

반환합니다.

래핑할 수 있는 변환된 모델을 반환합니다 PyTorch FSDP. load_state_dict_from_rank0가 로 True 설정되면 순위 0을 포함하는 텐서 병렬 그룹의 가중치는 원래 상태 사전에서 순위 0에 로드됩니다. 원본 모델에서 사용할 지연된 파라미터 초기화 때는 변환된 모델의 매개변수와 CPUs 버퍼에 사용할 실제 텐서가 이 랭크에만 적용됩니다. 나머지 랭크는 메모리 절약을 위해 메타 디바이스에 파라미터와 버퍼를 계속 저장합니다.

torch.sagemaker유틸리티 함수 및 속성

토치 세이지메이커 유틸리티 함수
  • torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None— 로 교육 작업을 초기화합니다. PyTorch SMP

  • torch.sagemaker.is_initialized() -> bool— 교육 작업이 로 초기화되었는지 확인합니다. SMP 작업을 로 초기화하는 PyTorch 동안 기본 속성으로 폴백하면 다음 속성 목록에 표시된 것처럼 일부 속성이 관련이 없어 집니다None. SMP

  • torch.sagemaker.utils.module_utils.empty_module_params(module: nn.Module, device: Optional[torch.device] = None, recurse: bool = False) -> nn.Module— 주어진 매개 변수가 있는 경우 빈 매개 변수를 생성합니다. 이 매개 변수는 지정된 device 경우 모든 중첩된 모듈에 대해 재귀적일 수 있습니다.

  • torch.sagemaker.utils.module_utils.move_buffers_to_device(module: nn.Module, device: torch.device, recurse: bool = False) -> nn.Module— 모듈 버퍼를 지정된 위치로 이동합니다. 지정된 device 경우 모든 중첩 모듈에 대해 재귀적일 수 있습니다.

속성

torch.sagemaker.statewith를 초기화한 후 유용한 속성을 여러 개 보유합니다. SMP torch.sagemaker.init

  • torch.sagemaker.state.hybrid_shard_degree(int) — 샤딩된 데이터 병렬도, 전달된 구성의 SMP 사용자 입력 사본입니다. torch.sagemaker.init() 자세한 내용은 SageMaker 모델 병렬 처리 라이브러리 v2 사용을 참조하십시오.

  • torch.sagemaker.state.rank(int) — 디바이스의 글로벌 순위 (범위). [0, world_size)

  • torch.sagemaker.state.rep_rank_process_group(torch.distributed.ProcessGroup) — 복제 순위가 동일한 모든 디바이스를 포함하는 프로세스 그룹입니다. 과의 미묘하지만 근본적인 차이점에 유의하십시오torch.sagemaker.state.tp_process_group. PyTorch네이티브로 폴백하면 다시 돌아옵니다None.

  • torch.sagemaker.state.tensor_parallel_degree(int) — 텐서 병렬 처리 정도, 전달된 SMP 구성의 사용자 입력 사본입니다. torch.sagemaker.init() 자세한 내용은 SageMaker 모델 병렬 처리 라이브러리 v2 사용을 참조하십시오.

  • torch.sagemaker.state.tp_size(int) — 의 별칭입니다. torch.sagemaker.state.tensor_parallel_degree

  • torch.sagemaker.state.tp_rank(int) — 텐서 병렬도 및 순위 메커니즘에 따라 결정되는 범위 내 장치의 텐서 병렬 처리 순위. [0, tp_size)

  • torch.sagemaker.state.tp_process_group(torch.distributed.ProcessGroup) — 다른 차원에서 순위가 같지만 (예: 분할된 데이터 병렬 처리 및 복제) 고유한 텐서 병렬 순위를 가진 모든 장치를 포함하는 텐서 병렬 프로세스 그룹. 네이티브로 폴백하면 반환됩니다. PyTorch None

  • torch.sagemaker.state.world_size(int) — 학습에 사용된 총 기기 수입니다.

SMPv1에서 v2로 SMP 업그레이드

SMPv1에서 SMP v2로 이동하려면 스크립트를 변경하여 SMP v1을 APIs 제거하고 v2를 적용해야 합니다. SMP APIs SMPv1 스크립트에서 시작하는 대신 스크립트에서 시작하여 의 지침을 따르는 것이 좋습니다. PyTorch FSDP SageMaker 모델 병렬 처리 라이브러리 v2 사용

SMPv1 모델을 SMP v2로 가져오려면 SMP v1에서 전체 모델 상태 사전을 수집하고 모델 상태 사전에 변환 함수를 적용하여 Hugging Face Transformer 모델 체크포인트 형식으로 변환해야 합니다. 그런 다음 SMP v2에서 를 사용한 체크포인트 지정 SMP 설명한 대로 Hugging Face Transformer 모델 체크포인트를 로드한 다음 v2에서 체크포인트를 계속 사용할 PyTorch 수 있습니다. APIs SMP PyTorch FSDP모델과 SMP 함께 사용하려면 SMP v2로 이동하여 사용할 PyTorch FSDP 교육 스크립트와 기타 최신 기능을 변경해야 합니다.

import smdistributed.modelparallel.torch as smp # Create model model = ... model = smp.DistributedModel(model) # Run training ... # Save v1 full checkpoint if smp.rdp_rank() == 0: model_dict = model.state_dict(gather_to_rank0=True) # save the full model # Get the corresponding translation function in smp v1 and translate if model_type == "gpt_neox": from smdistributed.modelparallel.torch.nn.huggingface.gptneox import translate_state_dict_to_hf_gptneox translated_state_dict = translate_state_dict_to_hf_gptneox(state_dict, max_seq_len=None) # Save the checkpoint checkpoint_path = "checkpoint.pt" if smp.rank() == 0: smp.save( {"model_state_dict": translated_state_dict}, checkpoint_path, partial=False, )

SMPv1에서 사용 가능한 번역 함수를 찾으려면 을 참조하십시오Hugging Face 변환기 모델 지원.

SMPv2에서 모델 체크포인트를 저장하고 로드하는 방법에 대한 지침은 을 참조하십시오. 를 사용한 체크포인트 지정 SMP