本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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_degree
和world_size
計算可能hybrid_shard_degree
的最大值。當回到本機 PyTorch FSDP用例時,如果FULL_SHARD
是您使用的策略,它會在整個集群中分片。GPUs如果_HYBRID_SHARD_ZERO2
是HYBRID_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
- torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save
- torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls
- torch.sagemaker.distributed.checkpoint.state_dict_saver.save
- torch.sagemaker.distributed.checkpoint.state_dict_loader.load
- torch.sagemaker.moe.moe_config.MoEConfig
- torch.sagemaker.nn.attn.FlashSelfAttention
- torch.sagemaker.nn.attn.FlashGroupedQueryAttention
- torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention
- torch.sagemaker.transform
- torch.sagemakerutil 函數和屬性
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
默認情況下,DelayedParamIniter
API找出如何正確初始化給定的模型。對於任何其他模型,您需要建立自訂參數初始化函數,並將其新增至指令碼。下列程式碼片段為 SMP v2 實作的預設init_method_using_config
函式Hugging Face Transformer SMP 模型與張量平行處理相容。請使用下列程式碼片段作為建立您自己的初始化設定函數、將其新增至指令碼,並將其傳遞至的參數的init_method_using_config
參數的參數的參考SMPDelayedParamIniter
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.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 的StorageReader
in 執行個體。如果未指定,則分散式檢查點會自動根據. checkpoint_id
如果也checkpoint_id
是None
,則引發異常錯誤。 -
planner
(StorageReader)-可選。LoadPlanner
中的執行個體 PyTorch。如果未指定,則會使用的 LoadPlanner
預設組態。 -
check_keys_matched
(布爾)-可選。如果啟用,檢查是否使用匹配所有等級的state_dict
鍵AllGather
。 -
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.transform
API給調用。若要深入瞭解此課程用於訓練 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_loss
sinkhorn
balanced
、、和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 模塊功能。當調用 amodule(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_mask
—torch.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-NeoX 模型之類的實現非常有用,該模型具有旋轉嵌入q
和fp32
之後k
使用。如果設定為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
一個用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
(浮動)-如果通過,則將此比例係數應用於軟最大。如果設定為None
,1 / sqrt(attention_head_size)
則會用作比例係數。預設值為None
。
方法
-
forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")
-常規 PyTorch 模塊功能。當調用 amodule(x)
時,會自動SMP運行此函數。-
q
—torch.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 之類的實現非常有用,它在旋轉嵌入fp32
後q,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_ids
(torch.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 -
device
(torch.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.sagemaker
util 函數和屬性
火炬下垂器使用功能
-
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。