Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die Referenz zur SageMaker Modellparallelbibliothek v2
Im Folgenden finden Sie Referenzen für die SageMaker Modellparallelbibliothek v2 (SMPv2).
Themen
SMPKonfigurationsparameter der v2-Kernfunktion
Im Folgenden finden Sie eine vollständige Liste der Parameter zur Aktivierung und Konfiguration vonKernfunktionen der SageMaker Modellparallelitätsbibliothek v2. Diese müssen im JSON Format geschrieben und an den PyTorch Schätzer in SageMaker Python übergeben SDK oder als JSON Datei für SageMaker HyperPod gespeichert werden.
{ "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
(Integer) — Gibt den Grad der Shard-Parallelität an. Der Wert muss eine Ganzzahl zwischen und sein.0
world_size
Der Standardwert ist0
.-
Wenn dieser Wert auf gesetzt ist
0
, wird er auf die native PyTorch Implementierung zurückgeführt, und wenn der Wert API im Skript auf 1 gesetzttensor_parallel_degree
ist. Andernfalls berechnet es den größtmöglichen Wert auf derhybrid_shard_degree
Grundlage vontensor_parallel_degree
undworld_size
. Wenn Sie auf die nativen Anwendungsfälle PyTorch FSDP zurückgreifen und wenn es die StrategieFULL_SHARD
ist, die Sie verwenden, verteilt sie sich auf den gesamten Cluster von. GPUs WennHYBRID_SHARD
oder_HYBRID_SHARD_ZERO2
war die Strategie, entsprichthybrid_shard_degree
sie 8 Wenn die Tensorparallelität aktiviert ist, wird sie auf der Grundlage der überarbeiteten Version fragmentiert.hybrid_shard_degree
-
Wenn auf gesetzt
1
, wird auf die native PyTorch Implementierung zurückgegriffen und API fürNO_SHARD
im Skript, wenn der Wert 1 ist.tensor_parallel_degree
Andernfalls entspricht esNO_SHARD
innerhalb einer beliebigen Tensorparallelgruppe. -
Wenn auf eine Ganzzahl zwischen 2 und gesetzt
world_size
, erfolgt das Sharding über die angegebene Anzahl von. GPUs Wenn Sie es nichtsharding_strategy
im FSDP Skript einrichten, wird es überschrieben.HYBRID_SHARD
Wenn Sie festlegen_HYBRID_SHARD_ZERO2
, wird das vonsharding_strategy
Ihnen angegebene verwendet.
-
-
sm_activation_offloading
(Boolean) — Gibt an, ob die Implementierung des SMP Aktivierungsauslagers aktiviert werden soll. FallsFalse
, wird beim Offloading die systemeigene Implementierung verwendet. PyTorch FallsTrue
, wird die Implementierung des SMP Aktivierungsauslagers verwendet. Sie müssen auch den PyTorch Aktivierungs-Offload-Wrapper (torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper
) in Ihrem Skript verwenden. Weitere Informationen hierzu finden Sie unter Aktivierung, Entladung. Der Standardwert istTrue
. -
activation_loading_horizon
(Integer) — Eine Ganzzahl, die den Typ des Aktivierungs-Offloading-Horizonts für angibt. FSDP Dies ist die maximale Anzahl von Ebenen mit Checkpoints oder Offload-Layern, deren Eingaben gleichzeitig im GPU Speicher gespeichert werden können. Weitere Informationen hierzu finden Sie unter Aktivierung, Entladung. Der Eingabewert muss eine positive Ganzzahl sein. Der Standardwert ist2
. -
fsdp_cache_flush_warnings
(Boolean) — Erkennt und warnt, wenn Cache-Leerungen im PyTorch Speichermanager auftreten, da sie die Rechenleistung beeinträchtigen können. Der Standardwert istTrue
. -
allow_empty_shards
(Boolean) — Ob beim Sharden von Tensoren leere Shards zulässig sind, wenn der Tensor nicht teilbar ist. Dies ist eine experimentelle Lösung für Abstürze beim Checkpointing in bestimmten Szenarien. Wenn Sie dies deaktivieren, wird auf das ursprüngliche PyTorch Verhalten zurückgegriffen. Der Standardwert istFalse
. -
tensor_parallel_degree
(Integer) — Gibt den Grad der Tensorparallelität an. Der Wert muss zwischen und liegen.1
world_size
Der Standardwert ist1
. Beachten Sie, dass die Übergabe eines Werts größer als 1 die Kontextparallelität nicht automatisch aktiviert. Sie müssen auch den verwenden, torch.sagemaker.transform API um das Modell in Ihr Trainingsskript einzubinden. Weitere Informationen hierzu finden Sie unter Tensor-Parallelität. -
context_parallel_degree
(Integer) — Gibt den Grad der Kontextparallelität an. Der Wert muss zwischen1
und liegen undworld_size
muss liegen.<= hybrid_shard_degree
Der Standardwert ist1
. Beachten Sie, dass die Übergabe eines Werts größer als 1 die Kontextparallelität nicht automatisch aktiviert. Sie müssen auch den verwenden, torch.sagemaker.transform API um das Modell in Ihr Trainingsskript einzubinden. Weitere Informationen hierzu finden Sie unter Kontext-Parallelität. -
expert_parallel_degree
(Integer) — Gibt den Grad der Parallelität für Experten an. Der Wert muss zwischen 1 und liegen.world_size
Der Standardwert ist1
. Beachten Sie, dass die Übergabe eines Werts, der größer als 1 ist, die Kontextparallelität nicht automatisch aktiviert. Sie müssen auch den verwenden, torch.sagemaker.transform API um das Modell in Ihr Trainingsskript einzubinden. Weitere Informationen hierzu finden Sie unter Parallelität für Experten. -
random_seed
(Integer) — Eine Startzahl für zufällige Operationen in verteilten Modulen nach SMP Tensor- oder Expertenparallelität. Dieser Startwert wird zu tensorparallelen oder expertenparallelen Rängen hinzugefügt, um den tatsächlichen Startwert für jeden Rang festzulegen. Es ist für jeden tensorparallelen und expertenparallelen Rang einzigartig. SMPv2 stellt sicher, dass die Zufallszahl, die über tensorparallele und expertenparallele Ränge generiert wird, mit den jeweiligen Fällen und Fällen übereinstimmt. non-tensor-parallelism non-expert-parallelism
Referenz für das v2-Paket SMP torch.sagemaker
Dieser Abschnitt ist eine Referenz für das von SMP v2 bereitgestellte torch.sagemaker
Paket.
Themen
- 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.sagemakerFunktionen und Eigenschaften von Util
torch.sagemaker.delayed_param.DelayedParamIniter
Und API für die Bewerbung Verzögerte Parameterinitialisierung auf ein PyTorch Modell.
class torch.sagemaker.delayed_param.DelayedParamIniter( model: nn.Module, init_method_using_config : Callable = None, verbose: bool = False, )
Parameter
-
model
(nn.Module
) — Ein PyTorch Modell zum Umschließen und Anwenden der verzögerten Parameterinitialisierungsfunktion von SMP v2. -
init_method_using_config
(Callable) — Wenn Sie die parallel Tensor-Implementierung von SMP v2 oder unterstützt verwendenHugging Face Transformer-Modelle, die mit der SMP Tensorparallelität kompatibel sind, behalten Sie diesen Parameter auf dem Standardwert bei, der lautet.None
StandardmäßigDelayedParamIniter
API findet der heraus, wie das angegebene Modell korrekt initialisiert wird. Für alle anderen Modelle müssen Sie eine benutzerdefinierte Parameter-Initialisierungsfunktion erstellen und sie Ihrem Skript hinzufügen. Der folgende Codeausschnitt ist dieinit_method_using_config
Standardfunktion, die SMP v2 für die implementiert hat. Hugging Face Transformer-Modelle, die mit der SMP Tensorparallelität kompatibel sind Verwenden Sie den folgenden Codeausschnitt als Referenz, um Ihre eigene Initialisierungskonfigurationsfunktion zu erstellen, sie Ihrem Skript hinzuzufügen und sie an den Parameter von zu übergeben.init_method_using_config
SMPDelayedParamIniter
APIfrom 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
)Weitere Hinweise zu den
torch.sagemaker.module_util
Funktionen im vorherigen Codeausschnitt finden Sie unter. torch.sagemakerFunktionen und Eigenschaften von Util -
verbose
(Boolean) — Ob eine detailliertere Protokollierung während der Initialisierung und Validierung aktiviert werden soll. Der Standardwert istFalse
.
Methoden
-
get_param_init_fn()
— Gibt die Parameterinitialisierungsfunktion zurück, die Sie an dasparam_init_fn
Argument der Wrapper-Klasse übergeben können. PyTorch FSDP -
get_post_param_init_fn()
— Gibt die Parameterinitialisierungsfunktion zurück, die Sie an daspost_param_init_fn
Argument der Wrapper-Klasse übergeben können. PyTorch FSDP Dies ist erforderlich, wenn Sie Gewichte im Modell gebunden haben. Das Modell muss die Methode implementierentie_weights
. Weitere Informationen finden Sie in den Hinweisen zum gebundenen Gewicht inVerzögerte Parameterinitialisierung. -
count_num_params
(module: nn.Module, *args: Tuple[nn.Parameter]
) — Verfolgt, wie viele Parameter von der Parameterinitialisierungsfunktion initialisiert werden. Dies hilft bei der Implementierung der folgendenvalidate_params_and_buffers_inited
Methode. Normalerweise müssen Sie diese Funktion nicht explizit aufrufen, da dievalidate_params_and_buffers_inited
Methode diese Methode implizit im Backend aufruft. -
validate_params_and_buffers_inited
(enabled: bool=True
) — Dies ist ein Kontextmanager, mit dessen Hilfe überprüft werden kann, ob die Anzahl der initialisierten Parameter mit der Gesamtzahl der Parameter im Modell übereinstimmt. Außerdem wird überprüft, ob sich alle Parameter und Puffer jetzt auf GPU Geräten und nicht mehr auf Metageräten befinden. Es wird ausgelöstAssertionErrors
, wenn diese Bedingungen nicht erfüllt sind. Dieser Kontextmanager ist nur optional und Sie müssen diesen Kontextmanager nicht verwenden, um Parameter zu initialisieren.
torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save
Eintrag API für asynchrones Speichern. Verwenden Sie diese Methode, um eine state_dict
asynchrone Datei an einem bestimmten Ort zu speichern. 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:
Parameter
-
state_dict
(dict) — Erforderlich. Das zu speichernde State-Diktat. -
checkpoint_id
(str) — Erforderlich. Der Speicherpfad, in dem Checkpoints gespeichert werden sollen. -
storage_writer
(StorageWriter) — Fakultativ. Eine Instanz vonStorageWriter
in PyTorch zur Ausführung von Schreiboperationen. Wenn dies nicht spezifiziert ist, StorageWriter
wird die Standardkonfiguration von verwendet. -
planner
(SavePlanner) — Fakultativ. Eine Instanz vonSavePlanner
in PyTorch. Wenn dies nicht angegeben ist, wird die Standardkonfiguration von SavePlanner
verwendet. -
process_group
(ProcessGroup) — Fakultativ. Die Prozessgruppe, an der gearbeitet werden soll. FallsNone
, wird die standardmäßige (globale) Prozessgruppe verwendet. -
coordinator_rank
(int) — Optional. Der Rang des Koordinators bei der Durchführung kollektiver Kommunikationsanbieter wieAllReduce
z. -
queue
(AsyncRequestQueue) — Fakultativ. Der zu verwendende asynchrone Scheduler. Standardmäßig verwendet er den globalen Parameter.DEFAULT_ASYNC_REQUEST_QUEUE
-
sharded_strategy
(PyTorchDistSaveShardedStrategy) — Fakultativ. Die Sharded-Strategie, die zum Speichern von Checkpoints verwendet werden soll. Wenn dies nicht angegeben ist,torch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy
wird standardmäßig verwendet. -
wait_error_handling
(bool) — Optional. Ein Flag, das angibt, ob gewartet werden soll, bis alle Ränge die Fehlerbehandlung abgeschlossen haben. Der Standardwert istTrue
. -
force_check_all_plans
(bool) — Optional. Ein Flag, das festlegt, ob die Rangübergreifung von Plänen erzwungen werden soll, auch im Fall eines Cache-Treffers. Der Standardwert istTrue
. -
s3_region
(str) — Fakultativ. Die Region, in der sich der S3-Bucket befindet. Wenn nicht angegeben, wird die Region aus demcheckpoint_id
abgeleitet. -
s3client_config
(S3ClientConfig) — Fakultativ. Die Datenklasse, die konfigurierbare Parameter für den S3-Client verfügbar macht. Falls nicht angegeben, wird die Standardkonfiguration von S3 ClientConfigverwendet. Der part_size
Parameter ist standardmäßig auf 64 MB eingestellt.
torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls
Diese Funktion ermöglicht einen Trainingsprozess zur Überwachung mehrerer asynchroner Anfragen.
def maybe_finalize_async_calls( blocking=True, process_group=None ) -> List[int]:
Parameter
-
blocking
(bool) — Optional. FallsTrue
, wird gewartet, bis alle aktiven Anfragen abgeschlossen sind. Andernfalls werden nur die asynchronen Anfragen abgeschlossen, die bereits abgeschlossen wurden. Der Standardwert istTrue
. -
process_group
(ProcessGroup) — Fakultativ. Die Prozessgruppe, mit der gearbeitet werden soll. Wenn auf gesetztNone
, wird die standardmäßige (globale) Prozessgruppe verwendet.
Rückgabewerte
-
Eine Liste mit den Indizes asynchroner Aufrufe wurde erfolgreich fertiggestellt.
torch.sagemaker.distributed.checkpoint.state_dict_saver.save
Verwenden Sie diese Methode, um eine state_dict
synchron zu einer bestimmten Datei zu speichern. 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:
Parameter
-
state_dict
(dict) — Erforderlich. Das zu speichernde State-Diktat. -
checkpoint_id
(str) — Erforderlich. Der Speicherpfad, in dem Checkpoints gespeichert werden sollen. -
storage_writer
(StorageWriter) — Fakultativ. Eine Instanz vonStorageWriter
in PyTorch zur Ausführung von Schreiboperationen. Wenn dies nicht spezifiziert ist, StorageWriter
wird die Standardkonfiguration von verwendet. -
planner
(SavePlanner) — Fakultativ. Eine Instanz vonSavePlanner
in PyTorch. Wenn dies nicht angegeben ist, wird die Standardkonfiguration von SavePlanner
verwendet. -
process_group
(ProcessGroup) — Fakultativ. Die Prozessgruppe, an der gearbeitet werden soll. FallsNone
, wird die standardmäßige (globale) Prozessgruppe verwendet. -
coordinator_rank
(int) — Optional. Der Rang des Koordinators bei der Durchführung kollektiver Kommunikationsanbieter wieAllReduce
z. -
wait_error_handling
(bool) — Fakultativ. Ein Flag, das angibt, ob gewartet werden soll, bis alle Ränge die Fehlerbehandlung abgeschlossen haben. Der Standardwert istTrue
. -
force_check_all_plans
(bool) — Optional. Ein Flag, das festlegt, ob die Rangübergreifung von Plänen erzwungen werden soll, auch im Fall eines Cache-Treffers. Der Standardwert istTrue
. -
s3_region
(str) — Fakultativ. Die Region, in der sich der S3-Bucket befindet. Wenn nicht angegeben, wird die Region aus demcheckpoint_id
abgeleitet. -
s3client_config
(S3ClientConfig) — Fakultativ. Die Datenklasse, die konfigurierbare Parameter für den S3-Client verfügbar macht. Falls nicht angegeben, wird die Standardkonfiguration von S3 ClientConfigverwendet. Der part_size
Parameter ist standardmäßig auf 64 MB eingestellt.
torch.sagemaker.distributed.checkpoint.state_dict_loader.load
Lädt das Statuswörterbuch eines verteilten Modells (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:
Parameter
-
state_dict
(dict) — Erforderlich. Dasstate_dict
zu laden. -
checkpoint_id
(str) — Erforderlich. Die ID eines Checkpoints. Die Bedeutung voncheckpoint_id
hängt vom Speicher ab. Es kann ein Pfad zu einem Ordner oder zu einer Datei sein. Es kann sich auch um einen Schlüssel handeln, wenn es sich bei dem Speicher um einen Schlüsselwertspeicher handelt. -
storage_reader
(StorageReader) — Fakultativ. Eine Instanz vonStorageReader
in PyTorch , um Lesevorgänge durchzuführen. Falls nicht angegeben, leitet verteiltes Checkpointing automatisch den Leser auf der Grundlage von ab. checkpoint_id
checkpoint_id
Ist dies ebenfalls der FallNone
, wird ein Ausnahmefehler ausgelöst. -
planner
(StorageReader) — Fakultativ. Eine Instanz vonLoadPlanner
in PyTorch. Falls nicht angegeben, wird die Standardkonfiguration von LoadPlanner
verwendet. -
check_keys_matched
(bool) — Optional. Wenn diese Option aktiviert ist, wird geprüft, ob diestate_dict
Schlüssel aller Ränge mitAllGather
übereinstimmen. -
s3_region
(str) — Fakultativ. Die Region, in der sich der S3-Bucket befindet. Wenn nicht angegeben, wird die Region aus demcheckpoint_id
abgeleitet. -
s3client_config
(S3ClientConfig) — Fakultativ. Die Datenklasse, die konfigurierbare Parameter für den S3-Client verfügbar macht. Falls nicht angegeben, wird die Standardkonfiguration von S3 ClientConfigverwendet. Der part_size
Parameter ist standardmäßig auf 64 MB eingestellt.
torch.sagemaker.moe.moe_config.MoEConfig
Eine Konfigurationsklasse für die Einrichtung der SMP -Implementierung von Mixture-of-Experts (MoE). Sie können MoE-Konfigurationswerte über diese Klasse angeben und sie an den Aufruf übergeben. torch.sagemaker.transform
API Weitere Informationen zur Verwendung dieser Klasse für das Training von MoE-Modellen finden Sie unterParallelität für Experten.
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 )
Parameter
-
smp_moe
(Boolean) — Ob die SMP -Implementierung von MoE verwendet werden soll. Der Standardwert istTrue
. -
random_seed
(Integer) — Eine Startzahl für die Zufallsoperationen in von Experten parallel verteilten Modulen. Dieser Startwert wird dem parallel Expertenrang hinzugefügt, um den tatsächlichen Startwert für jeden Rang festzulegen. Es ist für jeden parallel Expertenrang einzigartig. Der Standardwert ist12345
. -
moe_load_balancing
(Zeichenfolge) — Geben Sie den Lastausgleichstyp des MoE-Routers an. Gültige Optionen sindaux_loss
sinkhorn
,balanced
, undnone
. Der Standardwert istsinkhorn
. -
global_token_shuffle
(Boolean) — Gibt an, ob Tokens zwischen EP-Rängen innerhalb derselben EP-Gruppe gemischt werden sollen. Der Standardwert istFalse
. -
moe_all_to_all_dispatcher
(Boolean) — Ob der all-to-all Dispatcher für die Kommunikation in MoE verwendet werden soll. Der Standardwert istTrue
. -
moe_aux_loss_coeff
(Float) — Ein Koeffizient für den Verlust des zusätzlichen Lastenausgleichs. Der Standardwert ist0.001
. -
moe_z_loss_coeff
(Float) — Koeffizient für den Z-Verlust. Der Standardwert ist0.001
.
torch.sagemaker.nn.attn.FlashSelfAttention
Und API zur Verwendung FlashAttention mit 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, )
Parameter
-
attention_dropout_prob
(float) — Die Abbrecherwahrscheinlichkeit, die für Aufmerksamkeit gilt. Der Standardwert ist0.0
. -
scale
(float) — Wenn er bestanden wird, wird dieser Skalierungsfaktor für Softmax angewendet. Wenn er auf gesetzt istNone
(was auch der Standardwert ist), ist1 / sqrt(attention_head_size)
der Skalierungsfaktor. Der Standardwert istNone
. -
triton_flash_attention
(bool) — Falls übergeben, wird die Triton-Implementierung von Flash Attention verwendet. Dies ist notwendig, um Attention with Linear Biases (ALiBi) zu unterstützen (siehe den folgendenuse_alibi
Parameter). Diese Version des Kernels unterstützt Dropout nicht. Der Standardwert istFalse
. -
use_alibi
(bool) — Falls übergeben, aktiviert sie Attention with Linear Biases (ALiBi) unter Verwendung der bereitgestellten Maske. Bei der Verwendung ist eine Aufmerksamkeitsmaske erforderlichALiBi, die wie folgt vorbereitet wurde. Der Standardwert istFalse
.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
Methoden
-
forward(self, qkv, attn_mask=None, causal=False, cast_dtype=None, layout="b h s d")
— Eine reguläre PyTorch Modulfunktion. Wenn a aufgerufenmodule(x)
wird, SMP führt diese Funktion automatisch aus.-
qkv
— intorch.Tensor
der folgenden Form:(batch_size x seqlen x (3 x num_heads) x head_size)
oder(batch_size, (3 x num_heads) x seqlen x head_size)
, ein Tupel, von demtorch.Tensors
jedes eine Form haben könnte(batch_size x seqlen x num_heads x head_size)
, oder(batch_size x num_heads x seqlen x head_size)
. Basierend auf der Form muss ein geeignetes Layoutargument übergeben werden. -
attn_mask
—torch.Tensor
der folgenden Form(batch_size x 1 x 1 x seqlen)
. Um diesen Parameter für die Aufmerksamkeitsmaske zu aktivieren, benötigt ertriton_flash_attention=True
unduse_alibi=True
. Informationen zum Generieren einer Aufmerksamkeitsmaske mit dieser Methode finden Sie in den Codebeispielen unterFlashAttention. Der Standardwert istNone
. -
causal
— Wenn dieser Wert auf gesetzt istFalse
, was der Standardwert des Arguments ist, wird keine Maske angewendet. Wenn auf gesetztTrue
, verwendet dieforward
Methode die untere dreieckige Standardmaske. Der Standardwert istFalse
. -
cast_dtype
— Wenn sie auf einen bestimmten Wert gesetzt istdtype
, werden dieqkv
Tensoren auf den vorherigen Wert umgewandelt.dtype
attn
Dies ist nützlich für Implementierungen wie das Modell Hugging Face Transformer GPT -NeoX, das überq
undk
mit rotativen Einbettungen verfügt.fp32
Wenn diese Einstellung auf gesetzt ist, wird kein Cast angewendet.None
Der Standardwert istNone
. -
layout
(string) — Verfügbare Werte sindb h s d
oderb s h d
. Dies sollte auf das Layout der übergebenenqkv
Tensoren eingestellt werden, damit entsprechende Transformationen beantragt werden können.attn
Der Standardwert istb h s d
.
-
Rückgabewerte
Eine Single torch.Tensor
mit Form. (batch_size x num_heads x
seq_len x head_size)
torch.sagemaker.nn.attn.FlashGroupedQueryAttention
Und API zur Verwendung FlashGroupedQueryAttention
mit SMP v2. Weitere Informationen zur Verwendung finden Sie API unterVerwenden Sie FlashAttention Kernel für die Aufmerksamkeit bei Gruppenabfragen.
class torch.sagemaker.nn.attn.FlashGroupedQueryAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, )
Parameter
-
attention_dropout_prob
(float) — Die Abbrecherwahrscheinlichkeit, die auf Aufmerksamkeit angewendet werden soll. Der Standardwert ist0.0
. -
scale
(float) — Wenn er bestanden wird, wird dieser Skalierungsfaktor für Softmax angewendet. Wenn auf gesetztNone
,1 / sqrt(attention_head_size)
wird er als Skalierungsfaktor verwendet. Der Standardwert istNone
.
Methoden
-
forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")
— Eine reguläre PyTorch Modulfunktion. Wenn a aufgerufenmodule(x)
wird, SMP führt diese Funktion automatisch aus.-
q
—torch.Tensor
in der folgenden Form(batch_size x seqlen x num_heads x head_size)
oder(batch_size x num_heads x seqlen x head_size)
. Basierend auf der Form muss ein geeignetes Layout-Argument übergeben werden. -
kv
—torch.Tensor
der folgenden Form(batch_size x seqlen x (2 x num_heads) x head_size)
oder(batch_size, (2 x num_heads) x seqlen x head_size)
, oder ein Tupel aus zweitorch.Tensor
s, von denen jedes die Form(batch_size x seqlen x num_heads x head_size)
oder haben kann.(batch_size x num_heads x seqlen x head_size)
Basierend auf der Form muss auch ein entsprechendeslayout
Argument übergeben werden. -
causal
— Wenn dieser Wert auf gesetzt istFalse
, was der Standardwert des Arguments ist, wird keine Maske angewendet. Wenn auf gesetztTrue
, verwendet dieforward
Methode die untere dreieckige Standardmaske. Der Standardwert istFalse
. -
cast_dtype
— Wenn sie auf einen bestimmten Dtype gesetzt ist, werden dieqkv
Tensoren zuvor in diesen Dtype umgewandelt.attn
Dies ist nützlich für Implementierungen wie Hugging Face Transformers GPT -NeoX, die überq,k
rotatorische Einbettungen verfügen.fp32
Wenn auf gesetzt, wird kein Cast angewendet.None
Der Standardwert istNone
. -
layout (string) — Verfügbare Werte sind
"b h s d"
oder"b s h d"
. Dies sollte auf das Layout der übergebenenqkv
Tensoren eingestellt werden, damit entsprechende Transformationen beantragt werden können.attn
Der Standardwert ist"b h s d"
.
-
Rückgabewerte
Gibt einen Wert vom Typ Single zurück, der torch.Tensor (batch_size x num_heads x seq_len x
head_size)
das Ergebnis der Aufmerksamkeitsberechnung darstellt.
torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention
Und API das unterstützt FlashAttention das Lama-Modell. Dies API verwendet das torch.sagemaker.nn.attn.FlashGroupedQueryAttention API auf niedriger Ebene. Informationen zur Verwendung dieser Funktion finden Sie unterVerwenden Sie FlashAttention Kernel für die Aufmerksamkeit bei Gruppenabfragen.
class torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention( config: LlamaConfig )
Parameter
-
config
— Eine FlashAttention Konfiguration für das Lama-Modell.
Methoden
-
forward(self, hidden_states, attention_mask, position_ids, past_key_value, output_attentions, use_cache)
-
hidden_states
(torch.Tensor
) — Versteckte Zustände eines Tensors in Form von.(batch_size x seq_len x num_heads x head_size)
-
attention_mask
(torch.LongTensor
) — Maske, um zu vermeiden, dass Aufmerksamkeit auf das Auffüllen von Token-Indizes in Form von gerichtet wird.(batch_size x seqlen)
Der Standardwert istNone
. -
position_ids
(torch.LongTensor
) — Wenn nichtNone
, hat es die Form von(batch_size x seqlen)
, die Positionsindizes jedes Eingabesequenz-Tokens in den Positionseinbettungen anzugeben. Der Standardwert istNone
. -
past_key_value
(Cache) — Vorberechnete versteckte Zustände (Schlüssel und Werte in den Selbstaufmerksamkeitsblöcken und in den Queraufmerksamkeitsblöcken). Der Standardwert istNone
. -
output_attentions
(bool) — Gibt an, ob die Aufmerksamkeitstensoren aller Aufmerksamkeitsebenen zurückgegeben werden sollen. Der Standardwert istFalse
. -
use_cache
(bool) — Gibt an, ob Schlüsselwertstatus zurückgegebenpast_key_values
werden sollen. Der Standardwert istFalse
.
-
Rückgabewerte
Gibt einen Wert vom Typ Single zurücktorch.Tensor (batch_size x num_heads x seq_len x
head_size)
, der das Ergebnis der Aufmerksamkeitsberechnung darstellt.
torch.sagemaker.transform
SMPv2 bietet dies torch.sagemaker.transform()
API, um Hugging Face Transformer-Modelle in SMP Modellimplementierungen umzuwandeln und die SMP Tensorparallelität zu aktivieren.
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 verwaltet Transformationsrichtlinien für, Hugging Face Transformer-Modelle, die mit der SMP Tensorparallelität kompatibel sind indem es die Konfiguration der Hugging Face Transformer-Modelle in die SMP Transformer-Konfiguration konvertiert.
Parameter
-
model
(torch.nn.Module
) — Ein Modell, das Hugging Face Transformer-Modelle, die mit der SMP Tensorparallelität kompatibel sind die Tensorparallelitätsfunktion der Bibliothek transformiert und anwendet. SMP -
device
(torch.device
) — Falls erfolgreich, wird auf diesem Gerät ein neues Modell erstellt. Wenn das ursprüngliche Modul einen Parameter auf dem Metagerät hat (sieheVerzögerte Parameterinitialisierung), dann wird das transformierte Modul auch auf dem Metagerät erstellt, wobei das hier übergebene Argument ignoriert wird. Der Standardwert istNone
. -
dtype
(torch.dtype
) — Falls übergeben, wird dies als dtype-Kontextmanager für die Erstellung des Modells festgelegt und ein Modell mit diesem Dtype erstellt. Dies ist normalerweise unnötig, da wir das Modell mit erstellen wollen,fp32
wenn wir es verwendenMixedPrecision
, undfp32
es ist der Standard-Dtype in. PyTorch Der Standardwert istNone
. -
config
(dict) — Dies ist ein Wörterbuch für die SMP Konfiguration des Transformators. Der Standardwert istNone
. -
load_state_dict_from_rank0
(Boolean) — Standardmäßig erstellt dieses Modul eine neue Instanz des Modells mit neuen Gewichten. Wenn dieses Argument auf gesetzt ist, wird SMP versuchtTrue
, das Zustandswörterbuch des PyTorch Originalmodells vom 0-ten Rang in ein transformiertes Modell für die Tensorparallelgruppe zu laden, zu der der 0-te Rang gehört. Wenn dies auf gesetzt istTrue
, kann Rang 0 keine Parameter auf dem Metagerät haben. Nur die erste parallel Tensorgruppe füllt die Gewichte ab dem 0ten Rang nach diesem Transformationsaufruf auf. Sie müssenTrue
im FSDP Wrappersync_module_states
auf setzen, um diese Gewichte von der ersten Tensorparallelgruppe auf alle anderen Prozesse zu übertragen. Wenn diese Option aktiviert ist, lädt die SMP Bibliothek das Statuswörterbuch aus dem Originalmodell. Die SMP Bibliothek nimmt das Modell vorstate_dict
der Transformation, konvertiert es so, dass es der Struktur des transformierten Modells entspricht, splittert es für jeden tensorparallelen Rang, übermittelt diesen Zustand vom 0-ten Rang an andere Ränge in der tensorparallelen Gruppe, zu der der 0-te Rang gehört, und lädt ihn. Der Standardwert istFalse
.
Gibt zurück
Gibt ein transformiertes Modell zurück, mit dem Sie einen Wrap erstellen können PyTorch FSDP. Wenn auf gesetzt load_state_dict_from_rank0
istTrue
, hat die parallel Tensorgruppe, die Rang 0 beinhaltet, Gewichte aus dem ursprünglichen Zustandswörterbuch auf Rang 0 geladen. Bei Verwendung Verzögerte Parameterinitialisierung auf dem Originalmodell sind nur bei diesen Rängen die tatsächlichen Tensoren CPUs für die Parameter und Puffer des transformierten Modells aktiviert. In den übrigen Rängen befinden sich weiterhin die Parameter und Puffer auf dem Metagerät, um Speicherplatz zu sparen.
torch.sagemaker
Funktionen und Eigenschaften von Util
Funktionen von torch.sagemaker
-
torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None
— Initialisiert den Trainingsjob mit. PyTorch SMP -
torch.sagemaker.is_initialized() -> bool
— Prüft, ob der Trainingsjob mit initialisiert ist. SMP Wenn bei der Initialisierung des Jobs auf die native PyTorch Version zurückgegriffen wirdSMP, sind einige Eigenschaften nicht relevant und werdenNone
, wie in der folgenden Eigenschaftenliste angegeben, entsprechend. -
torch.sagemaker.utils.module_utils.empty_module_params(module: nn.Module, device: Optional[torch.device] = None, recurse: bool = False) -> nn.Module
— Erzeugt leere Parameter für das angegebene Objekt,device
falls vorhanden, und kann, falls angegeben, für alle verschachtelten Module rekursiv sein. -
torch.sagemaker.utils.module_utils.move_buffers_to_device(module: nn.Module, device: torch.device, recurse: bool = False) -> nn.Module
— Verschiebt Modulpuffer in den angegebenen Bereich und kanndevice
, falls angegeben, für alle verschachtelten Module rekursiv sein.
Eigenschaften
torch.sagemaker.state
enthält nach der Initialisierung von with mehrere nützliche Eigenschaften. SMP torch.sagemaker.init
-
torch.sagemaker.state.hybrid_shard_degree
(int) — Der Grad der Parallelität von Sharded Data, an den eine Kopie der Benutzereingabe in der SMP Konfiguration übergeben wurde.torch.sagemaker.init()
Weitere Informationen hierzu finden Sie unter Verwenden Sie die SageMaker Modellparallelitätsbibliothek v2. -
torch.sagemaker.state.rank
(int) — Der globale Rang für das Gerät im Bereich von.[0, world_size)
-
torch.sagemaker.state.rep_rank_process_group
(torch.distributed.ProcessGroup
) — Die Prozessgruppe, die alle Geräte mit demselben Replikationsrang umfasst. Beachten Sie den subtilen, aber grundlegenden Unterschied zutorch.sagemaker.state.tp_process_group
. Wenn Sie auf die native Version zurückgreifen PyTorch, kehrt sie zurückNone
. -
torch.sagemaker.state.tensor_parallel_degree
(int) — Der Grad der Tensorparallelität, eine Kopie der Benutzereingabe in der SMP Konfiguration, an die übergeben wurde.torch.sagemaker.init()
Weitere Informationen hierzu finden Sie unter Verwenden Sie die SageMaker Modellparallelitätsbibliothek v2. -
torch.sagemaker.state.tp_size
(int) — Ein Alias für.torch.sagemaker.state.tensor_parallel_degree
-
torch.sagemaker.state.tp_rank
(int) — Der Tensorparallelitätsrang für das Gerät im Bereich von[0, tp_size)
, bestimmt durch den Grad der Tensorparallelität und den Rangmechanismus. -
torch.sagemaker.state.tp_process_group
(torch.distributed.ProcessGroup
) — Die tensorparallele Prozessgruppe, die alle Geräte mit demselben Rang in anderen Dimensionen (z. B. Sharded Data Parallelität und Replikation), aber einzigartigen tensorparallelen Rängen umfasst. Wenn auf native Version zurückgegriffen wird, kehrt es zurück. PyTorchNone
-
torch.sagemaker.state.world_size
(int) — Die Gesamtzahl der im Training verwendeten Geräte.
Upgrade von Version SMP 1 auf SMP Version 2
Um von Version SMP 1 zu SMP Version 2 zu wechseln, müssen Sie Änderungen am Skript vornehmen, um SMP Version 1 zu entfernen APIs und SMP Version 2 anzuwendenAPIs. Anstatt mit Ihrem SMP v1-Skript zu beginnen, empfehlen wir Ihnen, mit einem PyTorch FSDP Skript zu beginnen und den Anweisungen unter zu folgenVerwenden Sie die SageMaker Modellparallelitätsbibliothek v2.
Um SMP v1-Modelle auf SMP v2 zu bringen, müssen Sie in Version SMP 1 das vollständige Modellstatuswörterbuch sammeln und die Übersetzungsfunktionen auf das Modellstatuswörterbuch anwenden, um es in das Modell-Checkpoint-Format von Hugging Face Transformers zu konvertieren. Dann können Sie in SMP v2, wie unter beschriebenCheckpointing mit SMP, die Modell-Checkpoints von Hugging Face Transformers laden und dann mit der Verwendung des PyTorch Checkpoints APIs mit v2 fortfahren. SMP Stellen Sie zur Verwendung SMP mit Ihrem PyTorch FSDP Modell sicher, dass Sie zu SMP Version 2 wechseln und Änderungen an Ihrem zu verwendenden Trainingsskript PyTorch FSDP und anderen aktuellen Funktionen vornehmen.
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, )
Informationen zu den verfügbaren Übersetzungsfunktionen in SMP Version 1 finden Sie unterSupport für Hugging Face Transformator-Modelle.
Anweisungen zum Speichern und Laden von Modell-Checkpoints in SMP Version 2 finden Sie unterCheckpointing mit SMP.