SageMaker 模型 parallel 程式庫 v2 參考 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SageMaker 模型 parallel 程式庫 v2 參考

以下是 SageMaker 模型 parallel 程式庫 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,則會回到原生 PyTorch實作,而API在指令碼中tensor_parallel_degree為 1。否則,它會根據tensor_parallel_degreeworld_size計算可能hybrid_shard_degree的最大值。當回到本機 PyTorch FSDP用例時,如果FULL_SHARD是您使用的策略,它會在整個集群中分片。GPUs如果_HYBRID_SHARD_ZERO2HYBRID_SHARD或是策略,則相當hybrid_shard_degree於 8。啟用張量平行處理原則時,它會根據修訂的項目進行碎片。hybrid_shard_degree

    • 如果設定為1,則會回到原生 PyTorch實作,API而NO_SHARD在指令碼中tensor_parallel_degree為 1。否則,它相當於任何給定張量 parallel 組NO_SHARD內。

    • 如果設定為介於 2 和之間的GPUs整數world_size,則會跨越指定的數目進行分片。如果您沒有在FSDP腳本sharding_strategy中設置,它將被覆蓋為HYBRID_SHARD. 如果您設定_HYBRID_SHARD_ZERO2,則會使用sharding_strategy您指定的。

  • sm_activation_offloading(布林值) — 指定是否啟用SMP啟用卸載實作。如果False,卸載使用本機 PyTorch 實現。如果True,它使用SMP激活卸載實現。您還需要在腳本中使用 PyTorch 激活卸載包裝器(torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper)。如需進一步了解,請參閱 啟用卸載。預設值為 True

  • activation_loading_horizon(整數) — 整數,指定的啟動卸載水平線類型。FSDP這是檢查點或卸載層的最大數目,其輸入可同時位於GPU記憶體中。如需進一步了解,請參閱 啟用卸載。輸入值必須是正整數。預設值為 2

  • fsdp_cache_flush_warnings(布林值) — 偵測並警告快取是否在 PyTorch 記憶體管理員中發生清除,因為它們可能會降低計算效能。預設值為 True

  • allow_empty_shards(布林值) — 如果張量不可整除,是否在分片張量時允許空分片。這是在某些情況下檢查點期間崩潰的實驗性修復程序。禁用此功能會回到原始 PyTorch 行為。預設值為 False

  • tensor_parallel_degree(整數) — 指定張量平行度。值必須介於1和之間world_size。預設值為 1。請注意,傳遞大於 1 的值並不會自動啟用內容平行處理原則;您也需要使用將模型包裝在訓練指令碼中。torch.sagemaker.transform API如需進一步了解,請參閱 張量平行處理

  • context_parallel_degree(整數) — 指定內容平行程度。值必須介於1和之間world_size,且必須是<= hybrid_shard_degree。預設值為 1。請注意,傳遞大於 1 的值並不會自動啟用內容平行處理原則;您也需要使用將模型包裝在訓練指令碼中。torch.sagemaker.transform API如需進一步了解,請參閱 內容平行處理

  • expert_parallel_degree(整數) — 指定專家平行程度。值必須介於 1 和之間world_size。預設值為 1。請注意,傳遞大於 1 的值並不會自動啟用內容平行處理原則;您也需要使用將模型包裝在訓練指令碼中。torch.sagemaker.transform API如需進一步了解,請參閱 專家平行處理

  • random_seed(整數) — 分散式模組中隨機作業的種子編號 (依SMP張量平行處理原則或專家平行處理原則)。此種子被添加到張量並行或專家 parallel 排名中,以設置每個等級的實際種子。它對於每個張量並行和專家並 parallel 排名都是獨一無二的。SMPv2 確保在張量並行和專家並 parallel 排名中生成的隨機數分別與案例匹配。 non-tensor-parallelism non-expert-parallelism

SMPv2 torch.sagemaker 套件的參考資料

本節是 SMP v2 所提供之torch.sagemaker套件的參考資料。

torch.sagemaker.delayed_param.DelayedParamIniter

用API於套用延遲參數初始化至 PyTorch模型的。

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

參數

  • model(nn.Module) — 要包裝並套用 SMP v2 之延遲參數初始化功能的 PyTorch 模型。

  • init_method_using_config(可呼叫) — 如果您使用 SMP v2 的張量 parallel 實作或受支援Hugging Face Transformer SMP 模型與張量平行處理相容,請將此參數保留為預設值,也就是說。None默認情況下,DelayedParamIniterAPI找出如何正確初始化給定的模型。對於任何其他模型,您需要建立自訂參數初始化函數,並將其新增至指令碼。下列程式碼片段為 SMP v2 實作的預設init_method_using_config函式Hugging Face Transformer SMP 模型與張量平行處理相容。請使用下列程式碼片段作為建立您自己的初始化設定函數、將其新增至指令碼,並將其傳遞至的參數的init_method_using_config參數的參數的參考SMPDelayedParamIniterAPI。

    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.sagemakerutil 函數和屬性

  • verbose(布林值) — 是否要在初始化和驗證期間啟用更詳細的記錄。預設值為 False

方法

  • get_param_init_fn()— 傳回可傳遞給 PyTorch FSDP包裝函式類別之param_init_fn引數的參數初始化函數。

  • get_post_param_init_fn()— 傳回可傳遞給 PyTorch FSDP包裝函式類別之post_param_init_fn引數的參數初始化函數。當您在模型中綁定了權重時,這是必需的。該模型必須實現該方法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:

參數

  • state_dict(字典)-必需的。要保存的狀態字典。

  • checkpoint_id(海峽)-必需的。儲存檢查點的儲存路徑。

  • storage_writer(StorageWriter)-可選。StorageWriter中執行寫入作業 PyTorch 的執行個體。如果未指定,則會使用的預設組StorageWriter態。

  • planner(SavePlanner)-可選。SavePlanner中的執行個體 PyTorch。如果未指定,則會使用的預設組SavePlanner態。

  • process_group(ProcessGroup)-可選。要處理的程序群組。如果None,則使用預設 (全域) 程序群組。

  • coordinator_rank(詮釋)-可選。執行集體溝通運營商,如時協調員的等級AllReduce

  • queue(AsyncRequestQueue)-可選。要使用的非同步排程器。默認情況下,它採用全局參數DEFAULT_ASYNC_REQUEST_QUEUE

  • sharded_strategy(PyTorchDistSaveShardedStrategy)-可選。用於保存檢查點的分片策略。如果未指定,torch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy則依預設會使用。

  • wait_error_handling(布爾)-可選。指定是否等待所有等待完成錯誤處理的旗標。預設值為 True

  • force_check_all_plans(布爾)-可選。決定是否要跨等級強制同步處理計劃的旗標,即使在快取命中的情況下也是如此。預設值為 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]:

參數

  • blocking(布爾)-可選。如果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:

參數

  • state_dict(字典)-必需的。要保存的狀態字典。

  • checkpoint_id(海峽)-必需的。儲存檢查點的儲存路徑。

  • storage_writer(StorageWriter)-可選。StorageWriter中執行寫入作業 PyTorch 的執行個體。如果未指定,則會使用的預設組StorageWriter態。

  • planner(SavePlanner)-可選。SavePlanner中的執行個體 PyTorch。如果未指定,則會使用的預設組SavePlanner態。

  • process_group(ProcessGroup)-可選。要處理的程序群組。如果None,則使用預設 (全域) 程序群組。

  • coordinator_rank(詮釋)-可選。執行集體溝通運營商,如時協調員的等級AllReduce

  • wait_error_handling(布爾)-可選。指定是否等待所有等待完成錯誤處理的旗標。預設值為 True

  • force_check_all_plans(布爾)-可選。決定是否要跨等級強制同步處理計劃的旗標,即使在快取命中的情況下也是如此。預設值為 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:

參數

  • state_dict(字典)-必需的。state_dict要載入的。

  • checkpoint_id(海峽)-必需的。檢查點的識別碼。的意義取checkpoint_id決於儲存空間。它可以是資料夾或檔案的路徑。如果存儲是鍵值存儲,它也可以是一個密鑰。

  • storage_reader(StorageReader)-可選。執行讀取作業 PyTorch 的 StorageReaderin 執行個體。如果未指定,則分散式檢查點會自動根據. checkpoint_id 如果也checkpoint_idNone,則引發異常錯誤。

  • planner(StorageReader)-可選。LoadPlanner中的執行個體 PyTorch。如果未指定,則會使用的LoadPlanner預設組態。

  • check_keys_matched(布爾)-可選。如果啟用,檢查是否使用匹配所有等級的state_dictAllGather

  • s3_region(STR)-可選。S3 儲存貯體所在的區域。如果未指定,則會從推論區域。checkpoint_id

  • s3client_config(S3ClientConfig)-可選。資料類別公開 S3 用戶端的可設定參數。如果未提供,則會使用 S3 ClientConfig 的預設組態。依預設,part_size參數設定為 64MB。

torch.sagemaker.moe.moe_config.MoEConfig

用於設置專家混合(MoE)的SMP實現的配置類。您可以通過此類指定 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 )

參數

  • smp_moe(布林值)-是否使用 SMP-MoE 的實作。預設值為 True

  • random_seed(整數)-專家 parallel 分散式模組中隨機作業的種子編號。此種子被添加到專家 parallel 排名中,以設置每個等級的實際種子。它對於每個專家 parallel 排名都是獨一無二的。預設值為 12345

  • moe_load_balancing(字串)-指定 MoE 路由器的負載平衡類型。有效的選項包括aux_losssinkhornbalanced、、和none。預設值為 sinkhorn

  • global_token_shuffle(布林值)-是否在同一 EP 群組中跨 EP 等級洗牌。預設值為 False

  • moe_all_to_all_dispatcher(布林值)-是否在 MoE 中使用 all-to-all 調度程式進行通訊。預設值為 True

  • moe_aux_loss_coeff(浮動)-輔助負載平衡損耗的係數。預設值為 0.001

  • moe_z_loss_coeff(浮動)-z 損耗係數。預設值為 0.001

torch.sagemaker.nn.attn.FlashSelfAttention

一個用API於FlashAttention與 SMP v2 一起使用。

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, )

參數

  • attention_dropout_prob(浮動) — 輟學概率適用於注意. 預設值為 0.0

  • scale(浮動)-如果通過,則將此比例係數應用於軟最大。如果設定為 None (也是預設值),則比例係數為1 / sqrt(attention_head_size)。預設值為 None

  • triton_flash_attention(布爾)-如果通過,則使用 Triton 實現閃光關注。這對於支援線性偏差的注意 (ALiBi) 是必要的 (請參閱下列use_alibi參數)。此版本的核心不支援輟學。預設值為 False

  • use_alibi(布爾)-如果通過,它可以使用提供的面膜使線性偏差(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 模塊功能。當調用 a module(x) 時,會自動SMP運行此函數。

    • qkv-torch.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)。必須根據形狀傳遞適當的佈局 arg。

    • attn_masktorch.Tensor 以下形式(batch_size x 1 x 1 x seqlen)。若要啟用此注意遮罩參數,它需要triton_flash_attention=Trueuse_alibi=True。若要瞭解如何使用此方法產生注意遮罩,請參閱中的程式碼範例FlashAttention。預設值為 None

    • causal— 當設定為 False (此為引數的預設值) 時,不會套用遮罩。設定為時True,此forward方法會使用標準的下三角形遮色片。預設值為 False

    • cast_dtype— 當設置為一個特定的dtype,它將qkv張量投射到之dtypeattn。這對於諸如 Hugging Face 變壓器 GPT-NeoX 模型之類的實現非常有用,該模型具有旋轉嵌入qfp32之後k使用。如果設定為None,則不會套用轉換。預設值為 None

    • layout(字串) — 可用值為b h s db 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

一個用API於FlashGroupedQueryAttention與 SMP v2 一起使用。若要進一步瞭解此功能的用法API,請參閱使用 FlashAttention 核心進行分組查詢注意

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

參數

  • attention_dropout_prob(浮動) — 輟學概率適用於注意. 預設值為 0.0

  • scale(浮動)-如果通過,則將此比例係數應用於軟最大。如果設定為None1 / sqrt(attention_head_size)則會用作比例係數。預設值為 None

方法

  • forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")-常規 PyTorch 模塊功能。當調用 a module(x) 時,會自動SMP運行此函數。

    • qtorch.Tensor 以下形式(batch_size x seqlen x num_heads x head_size)(batch_size x num_heads x seqlen x head_size). 必須根據形狀傳遞適當的佈局 arg。

    • kv-torch.Tensor 以下形式(batch_size x seqlen x (2 x num_heads) x head_size)(batch_size, (2 x num_heads) x seqlen x head_size),或兩個 torch.Tensor s 的元組,每個都可能是形狀(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 變壓器 GPT-NeoX 之類的實現非常有用,它在旋轉嵌入fp32q,k具有。如果設定為None,則不會套用轉換。預設值為 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 持駱駝模型。這API使用torch.sagemaker.nn.attn.FlashGroupedQueryAttentionAPI低級別。若要瞭解如何使用此功能,請參閱使用 FlashAttention 核心進行分組查詢注意

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

參數

  • 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_idstorch.LongTensor)-如果不存在None,則表示嵌入位置中每個輸入序列令牌的位置的索引。(batch_size x seqlen)預設值為 None

    • past_key_value(緩存)-預先計算的隱藏狀態(自我注意力塊和交叉注意力塊中的鍵和值)。預設值為 None

    • output_attentions(布爾)-表示是否返回所有注意層的注意力張量。預設值為 False

    • use_cache(布爾)-指示是否返回past_key_values鍵值狀態。預設值為 False

傳回值

返回一個代表torch.Tensor (batch_size x num_heads x seq_len x head_size)注意計算的輸出。

torch.sagemaker.transform

SMPv2 提供了這一點,用torch.sagemaker.transform()API於將 Hugging Face 變壓器模型轉換為SMP模型實現並實現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 變壓器模型的組態轉換為變壓器組態,以維護的SMP轉換原則。Hugging Face Transformer SMP 模型與張量平行處理相容

參數

  • model(torch.nn.Module) — Hugging Face Transformer SMP 模型與張量平行處理相容 要轉換的模型,並套用程式庫的張量平行度功能。SMP

  • devicetorch.device)— 如果通過,則在此設備上創建一個新模型。如果原始模塊在元設備上具有任何參數(見延遲參數初始化),則轉換後的模塊也將在元設備上創建,忽略此處傳遞的參數。預設值為 None

  • dtype(torch.dtype)-如果通過,則將其設置為用於創建模型的 dtype 前後關聯管理器,並使用此 dtype 創建一個模型。這通常是不必要的,因為我們想在使用fp32時創建模型MixedPrecision,並且fp32是中 PyTorch的默認 dtype。預設值為 None

  • config(dict)-這是配置SMP變壓器的字典。預設值為 None

  • load_state_dict_from_rank0(布林值) — 依預設,此模組會建立具有新權重的新模型執行個體。當此引數設定為時True,SMP會嘗試將原始 PyTorch 模型的狀態字典從第 0 等級載入到第 0 階所屬張量 parallel 群組的轉換模型中。將其設置為時True,排名 0 在元設備上不能有任何參數。在此轉換調用之後,只有第一個張量 parallel 組才會填充第 0 級的權重。您需要在FSDP包裝器True中設置sync_module_states為以從第一個張量 parallel 組獲取這些權重到所有其他進程。啟用此選項後,資SMP源庫會從原始模型載入狀態字典。該SMP庫在轉換之前獲取模型,將其轉換為匹配轉換後的模型的結構,為每個張量 parallel 級分片,將此狀態從第 0 級傳達到第 0 級所屬張量 parallel 組中的其他排名,並加載它。state_dict預設值為 False

返回

傳回您可以換行的轉換模型 PyTorch FSDP。當設定load_state_dict_from_rank0為時True,涉及等級 0 的張量 parallel 群組會從等級 0 的原始狀態字典載入權重。在原始模型延遲參數初始化上使用時,只有這些等級會針對轉換模型CPUs的參數和緩衝區啟用實際張量。排名的其餘部分繼續具有元設備上的參數和緩衝區以節省內存。

torch.sagemakerutil 函數和屬性

火炬下垂器使用功能
  • torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None— 使SMP用初始化 PyTorch 訓練工作。

  • torch.sagemaker.is_initialized() -> bool— 檢查訓練工作是否使用初始化SMP。當使用初始化工作 PyTorch 時返回到原生時SMP,某些屬性不相關且會變成None,如下列 [屬性] 清單所示。

  • 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.state在與初始化後保持多個有用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) — 張量 parallel 處理程序群組包括在其他維度中具有相同等級的所有裝置 (例如,分片資料 parallel 處理原則和複寫),但是唯一張量並行排名。當回落到原生 PyTorch,它返回None

  • torch.sagemaker.state.world_size(int) — 訓練中使用的裝置總數。

從SMP第 1 版升級到第 SMP 2 版

若要從 SMP v1 移至 SMP v2,您必須進行指令碼變更以移除 SMP v1 APIs 並套用 SMP v2 APIs。我們建議您從指令碼開始,而不是從 SMP v1 指 PyTorch FSDP令碼開始,然後遵循中的指示使用 SageMaker 模型平行處理程式庫 v2

若要將 SMP v1 模帶到 SMP v2,在 SMP v1 中,您必須收集完整的模型狀態字典,並在模型狀態字典上套用翻譯函數,將其轉換為 Hugging Face 部變形金剛模型檢查點格式。然後在 SMP v2 中,如所述使用 進行檢查點 SMP,您可以載入 Hugging Face 變壓器模型檢查點,然後繼續使用 v2 APIs 的 PyTorch SMP檢查點。若要SMP與 PyTorch FSDP模型搭配使用,請確定您移至 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, )

若要在 SMP v1 中尋找可用的翻譯函數,請參閱支援 Hugging Face 轉換器模型

有關在 SMP v2 中保存和加載模型檢查點的說明,請參閱使用 進行檢查點 SMP