Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
La referencia de la biblioteca paralela de SageMaker modelos v2
Las siguientes son referencias para la biblioteca paralela de SageMaker modelos v2 (SMPv2).
Temas
SMPv2: parámetros de configuración de las funciones principales
La siguiente es una lista completa de los parámetros para activar y configurar elCaracterísticas principales de la biblioteca de paralelismo de SageMaker modelos v2. Deben escribirse en JSON formato y pasarse al PyTorch estimador en SageMaker Python SDK o guardarse como un JSON archivo para. 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
(Entero): especifica un grado de paralelismo fragmentado. El valor debe ser un número entero comprendido entre y.0
world_size
El valor predeterminado es0
.-
Si se establece en
0
, vuelve a la PyTorch implementación nativa y API al script cuandotensor_parallel_degree
es 1. De lo contrario, calcula el mayor tamaño posible enhybrid_shard_degree
función detensor_parallel_degree
yworld_size
. Al volver a los casos de PyTorch FSDP uso nativos, siFULL_SHARD
es la estrategia que utilizas, se divide en todo el grupo de. GPUs SiHYBRID_SHARD
o_HYBRID_SHARD_ZERO2
fue la estrategia, equivale ahybrid_shard_degree
8. Cuando el paralelismo tensorial está habilitado, se fragmenta según lo revisado.hybrid_shard_degree
-
Si se establece en
1
, vuelve a la PyTorch implementación nativa y,NO_SHARD
en el script, API cuando es 1.tensor_parallel_degree
De lo contrario, es equivalente aNO_SHARD
dentro de cualquier grupo tensor paralelo dado. -
Si se establece en un número entero entre 2 y
world_size
, la fragmentación se produce en el número especificado de. GPUs Si no lo configurassharding_strategy
en el FSDP script, se anula en.HYBRID_SHARD
Si lo estableces_HYBRID_SHARD_ZERO2
, se usarásharding_strategy
lo que especifiques.
-
-
sm_activation_offloading
(Boolean): especifica si se debe habilitar la implementación de SMP activación y descarga. SiFalse
, la descarga utiliza la implementación nativa. PyTorch SiTrue
, utiliza la implementación de SMP activación y descarga. También debe usar la función offload wrapper ()torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper
de PyTorch activación en su script. Para obtener más información, consulte Descarga de activación. El valor predeterminado esTrue
. -
activation_loading_horizon
(Entero): un entero que especifica el tipo de horizonte de descarga de activación para. FSDP Es el número máximo de capas descargadas o con puntos de control cuyas entradas pueden estar en la memoria simultáneamente. GPU Para obtener más información, consulte Descarga de activación. El valor de entrada debe ser un número entero positivo. El valor predeterminado es2
. -
fsdp_cache_flush_warnings
(Booleano): detecta y advierte si se producen descargas de caché en el administrador de PyTorch memoria, ya que pueden reducir el rendimiento computacional. El valor predeterminado esTrue
. -
allow_empty_shards
(Booleano): si se deben permitir fragmentos vacíos al fragmentar tensores si el tensor no es divisible. Se trata de una solución experimental para evitar que se produzcan bloqueos durante los puntos de control en determinadas situaciones. Al deshabilitar esto, se vuelve al comportamiento original PyTorch . El valor predeterminado esFalse
. -
tensor_parallel_degree
(Entero): especifica el grado de paralelismo del tensor. El valor debe estar comprendido entre y.1
world_size
El valor predeterminado es1
. Tenga en cuenta que al pasar un valor superior a 1 no se habilita automáticamente el paralelismo del contexto; también debe usarlo para incluir el torch.sagemaker.transform API modelo en su guion de entrenamiento. Para obtener más información, consulte Paralelismo de tensores. -
context_parallel_degree
(Entero): especifica el grado de paralelismo del contexto. El valor debe estar comprendido entre1
y yworld_size
debe estar.<= hybrid_shard_degree
El valor predeterminado es1
. Tenga en cuenta que al pasar un valor superior a 1 no se habilita automáticamente el paralelismo de contexto; también debe usarlo para incluir el torch.sagemaker.transform API modelo en su guion de entrenamiento. Para obtener más información, consulte Paralelismo de contexto. -
expert_parallel_degree
(Entero): especifica un grado de paralelismo experto. El valor debe estar comprendido entre 1 y.world_size
El valor predeterminado es1
. Tenga en cuenta que pasar un valor superior a 1 no habilita el paralelismo de contexto automáticamente; también debe usarlo para incluir el torch.sagemaker.transform API modelo en su guion de entrenamiento. Para obtener más información, consulte Paralelismo experto. -
random_seed
(Entero): un número inicial para las operaciones aleatorias en módulos distribuidos mediante paralelismo SMP tensorial o paralelismo experto. Esta semilla se agrega a los rangos tensor-paralelo o experto-paralelo para establecer la semilla real de cada rango. Es único para cada rango tensor-paralelo y experto-paralelo. SMPv2 se asegura de que el número aleatorio generado en los rangos tensor-paralelo y experto-paralelo coincida con los casos y, respectivamente. non-tensor-parallelism non-expert-parallelism
Referencia para el paquete v2 SMP torch.sagemaker
Esta sección es una referencia para el torch.sagemaker
paquete proporcionado por la SMP versión 2.
Temas
- 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.sagemakerFunciones y propiedades de util
torch.sagemaker.delayed_param.DelayedParamIniter
Y API para aplicarlo Inicialización retrasada de los parámetros a un PyTorch modelo.
class torch.sagemaker.delayed_param.DelayedParamIniter( model: nn.Module, init_method_using_config : Callable = None, verbose: bool = False, )
Parámetros
-
model
(nn.Module
): un PyTorch modelo para empaquetar y aplicar la funcionalidad de inicialización retardada de parámetros de la SMP versión 2. -
init_method_using_config
(Llamable): si usa la implementación tensor parallel de SMP v2 o es compatibleModelos de Hugging Face Transformer compatibles con el paralelismo SMP tensorial, mantenga este parámetro en el valor predeterminado, que es.None
De forma predeterminada,DelayedParamIniter
API descubre cómo inicializar correctamente el modelo dado. Para cualquier otro modelo, debe crear una función de inicialización de parámetros personalizada y añadirla a su script. El siguiente fragmento de código es lainit_method_using_config
función predeterminada que la SMP versión 2 implementó para. Modelos de Hugging Face Transformer compatibles con el paralelismo SMP tensorial Utilice el siguiente fragmento de código como referencia para crear su propia función de configuración de inicialización, añadirla al script y pasarla al parámetro de.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
)Para obtener más información sobre las
torch.sagemaker.module_util
funciones del fragmento de código anterior, consulte. torch.sagemakerFunciones y propiedades de util -
verbose
(Booleano): si se debe permitir un registro más detallado durante la inicialización y la validación. El valor predeterminado esFalse
.
Métodos
-
get_param_init_fn()
— Devuelve la función de inicialización de parámetros que se puede pasar alparam_init_fn
argumento de la clase contenedora. PyTorch FSDP -
get_post_param_init_fn()
— Devuelve la función de inicialización de parámetros que se puede pasar alpost_param_init_fn
argumento de la PyTorch FSDP clase contenedora. Esto es necesario cuando se han vinculado pesas en el modelo. El modelo debe implementar el métodotie_weights
. Para obtener más información, consulte las notas sobre el peso atado enInicialización retrasada de los parámetros. -
count_num_params
(module: nn.Module, *args: Tuple[nn.Parameter]
) — Realiza un seguimiento del número de parámetros que está inicializando la función de inicialización de parámetros. Esto ayuda a implementar el siguientevalidate_params_and_buffers_inited
método. Por lo general, no es necesario llamar a esta función de forma explícita, ya que elvalidate_params_and_buffers_inited
método llama implícitamente a este método en el backend. -
validate_params_and_buffers_inited
(enabled: bool=True
): se trata de un administrador de contexto que ayuda a validar que el número de parámetros inicializados coincide con el número total de parámetros del modelo. También valida que todos los parámetros y búferes estén ahora en los dispositivos y no en GPU los metadispositivos. SurgeAssertionErrors
si no se cumplen estas condiciones. Este administrador de contexto solo es opcional y no es necesario que lo utilice para inicializar los parámetros.
torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save
Entrada API para guardar de forma asíncrona. Utilice este método para guardar una de forma state_dict
asíncrona en una especificada. 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:
Parámetros
-
state_dict
(dict): obligatorio. El decreto estatal de ahorrar. -
checkpoint_id
(str): obligatorio. La ruta de almacenamiento en la que se guardan los puntos de control. -
storage_writer
(StorageWriter) - Opcional. Una instancia deStorageWriter
in PyTorch para realizar operaciones de escritura. Si no se especifica, se utiliza la configuración predeterminada StorageWriter
de. -
planner
(SavePlanner) - Opcional. Una instancia deSavePlanner
entrada PyTorch. Si no se especifica, se utiliza la configuración por defecto SavePlanner
de. -
process_group
(ProcessGroup) - Opcional. El grupo de procesos en el que se va a trabajar. SiNone
, se utiliza el grupo de procesos predeterminado (global). -
coordinator_rank
(int): opcional. El rango del coordinador cuando se desempeñan operadores de comunicación colectiva comoAllReduce
. -
queue
(AsyncRequestQueue) - Opcional. El programador asíncrono que se va a utilizar. De forma predeterminada, toma el parámetro global.DEFAULT_ASYNC_REQUEST_QUEUE
-
sharded_strategy
(PyTorchDistSaveShardedStrategy) - Opcional. La estrategia fragmentada que se utilizará para guardar los puntos de control. Si no se especifica, setorch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy
utiliza de forma predeterminada. -
wait_error_handling
(bool): opcional. Un indicador que especifica si se debe esperar a que todos los rangos terminen de gestionar los errores. El valor predeterminado esTrue
. -
force_check_all_plans
(bool): opcional. Un indicador que determina si se deben sincronizar por la fuerza los planes de todos los rangos, incluso en el caso de un ataque de caché. El valor predeterminado esTrue
. -
s3_region
(str): opcional. La región en la que se encuentra el depósito S3. Si no se especifica, la región se deduce decheckpoint_id
. -
s3client_config
(S3ClientConfig): opcional. La clase de datos que expone los parámetros configurables para el cliente S3. Si no se proporciona, se utiliza la configuración predeterminada de S3 ClientConfig. El part_size
parámetro está establecido en 64 MB de forma predeterminada.
torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls
Esta función permite que un proceso de entrenamiento supervise varias solicitudes asíncronas que se van a realizar.
def maybe_finalize_async_calls( blocking=True, process_group=None ) -> List[int]:
Parámetros
-
blocking
(bool): opcional. SiTrue
, esperará hasta que se completen todas las solicitudes activas. De lo contrario, finaliza solo las solicitudes asincrónicas que ya han finalizado. El valor predeterminado esTrue
. -
process_group
() - OpcionalProcessGroup. El grupo de procesos en el que se va a operar. Si se establece enNone
, se utiliza el grupo de procesos (global) predeterminado.
Devuelve
-
Se ha finalizado correctamente una lista que contiene los índices de las llamadas asíncronas.
torch.sagemaker.distributed.checkpoint.state_dict_saver.save
Utilice este método para guardar de forma state_dict
sincrónica en un archivo especificado. 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:
Parámetros
-
state_dict
(dict): obligatorio. El decreto estatal de ahorrar. -
checkpoint_id
(str): obligatorio. La ruta de almacenamiento en la que se guardan los puntos de control. -
storage_writer
(StorageWriter) - Opcional. Una instancia deStorageWriter
in PyTorch para realizar operaciones de escritura. Si no se especifica, se utiliza la configuración predeterminada StorageWriter
de. -
planner
(SavePlanner) - Opcional. Una instancia deSavePlanner
entrada PyTorch. Si no se especifica, se utiliza la configuración por defecto SavePlanner
de. -
process_group
(ProcessGroup) - Opcional. El grupo de procesos en el que se va a trabajar. SiNone
, se utiliza el grupo de procesos predeterminado (global). -
coordinator_rank
(int): opcional. El rango del coordinador cuando se desempeñan operadores de comunicación colectiva comoAllReduce
. -
wait_error_handling
(bool): opcional. Un indicador que especifica si se debe esperar a que todos los rangos terminen de gestionar los errores. El valor predeterminado esTrue
. -
force_check_all_plans
(bool): opcional. Un indicador que determina si se deben sincronizar por la fuerza los planes de todos los rangos, incluso en el caso de un ataque de caché. El valor predeterminado esTrue
. -
s3_region
(str): opcional. La región en la que se encuentra el depósito S3. Si no se especifica, la región se deduce decheckpoint_id
. -
s3client_config
(S3ClientConfig): opcional. La clase de datos que expone los parámetros configurables para el cliente S3. Si no se proporciona, se utiliza la configuración predeterminada de S3 ClientConfig. El part_size
parámetro está establecido en 64 MB de forma predeterminada.
torch.sagemaker.distributed.checkpoint.state_dict_loader.load
Cargue el diccionario de estados de un modelo distribuido (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:
Parámetros
-
state_dict
(dict): obligatorio. Lastate_dict
carga superior. -
checkpoint_id
(str) - Necesario. El ID de un punto de control. El significado decheckpoint_id
depende del almacenamiento. Puede ser una ruta a una carpeta o a un archivo. También puede ser una clave si el almacenamiento es un almacén de valores clave. -
storage_reader
(StorageReader) - Opcional. Una instancia deStorageReader
in PyTorch para realizar operaciones de lectura. Si no se especifica, los puntos de control distribuidos deducirán automáticamente el lector en función del. checkpoint_id
Si tambiéncheckpoint_id
lo esNone
, se generará un error de excepción. -
planner
(StorageReader) - Opcional. Una instancia deLoadPlanner
entrada PyTorch. Si no se especifica, se utiliza la configuración predeterminada LoadPlanner
de. -
check_keys_matched
(bool): opcional. Si está activado, comprueba si lasstate_dict
claves de todos los rangos coinciden utilizandoAllGather
. -
s3_region
(str): opcional. La región en la que se encuentra el depósito S3. Si no se especifica, la región se deduce decheckpoint_id
. -
s3client_config
(S3ClientConfig): opcional. La clase de datos que expone los parámetros configurables para el cliente S3. Si no se proporciona, se utiliza la configuración predeterminada de S3 ClientConfig. El part_size
parámetro está establecido en 64 MB de forma predeterminada.
torch.sagemaker.moe.moe_config.MoEConfig
Una clase de configuración para configurar la SMP implementación de Mixture-of-Experts (MoE). Puede especificar los valores de configuración del MoE a través de esta clase y pasarlos a la llamada. torch.sagemaker.transform
API Para obtener más información sobre el uso de esta clase para entrenar modelos MoE, consulteParalelismo experto.
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 )
Parámetros
-
smp_moe
(Booleano): si se debe utilizar la SMP implementación -del MoE. El valor predeterminado esTrue
. -
random_seed
(Entero): un número inicial para las operaciones aleatorias en módulos distribuidos en paralelo experto. Esta semilla se añade al rango paralelo experto para establecer la semilla real de cada rango. Es único para cada rango de experto en parallel. El valor predeterminado es12345
. -
moe_load_balancing
(Cadena): especifique el tipo de equilibrio de carga del router MoE. Las opciones válidas sonaux_loss
sinkhorn
,balanced
, ynone
. El valor predeterminado essinkhorn
. -
global_token_shuffle
(Booleano): si se deben mezclar fichas entre los rangos de EP del mismo grupo de EP. El valor predeterminado esFalse
. -
moe_all_to_all_dispatcher
(Boolean): si se debe usar el all-to-all despachador para las comunicaciones en el MoE. El valor predeterminado esTrue
. -
moe_aux_loss_coeff
(Flotar): coeficiente de pérdida por balanceo de carga auxiliar. El valor predeterminado es0.001
. -
moe_z_loss_coeff
(Flotar): coeficiente de pérdida z. El valor predeterminado es0.001
.
torch.sagemaker.nn.attn.FlashSelfAttention
Y API para usar FlashAttention con 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, )
Parámetros
-
attention_dropout_prob
(flotante): la probabilidad de abandono que se aplica a la atención. El valor predeterminado es0.0
. -
scale
(flotante): si se aprueba, este factor de escala se aplica a softmax. Si se establece enNone
(que también es el valor por defecto), el factor de escala es1 / sqrt(attention_head_size)
. El valor predeterminado esNone
. -
triton_flash_attention
(bool): si se aprueba, se utiliza la implementación Triton de la atención flash. Esto es necesario para admitir Attention with Linear Biases (ALiBi) (consulte el siguienteuse_alibi
parámetro). Esta versión del núcleo no admite el abandono. El valor predeterminado esFalse
. -
use_alibi
(bool): si se aprueba, activa Attention with Linear Biases (ALiBi) con la máscara proporcionada. Cuando se usaALiBi, necesita una máscara de atención preparada de la siguiente manera. El valor predeterminado esFalse
.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
Métodos
-
forward(self, qkv, attn_mask=None, causal=False, cast_dtype=None, layout="b h s d")
— Una función PyTorch modular normal. Cuandomodule(x)
se llama a, SMP ejecuta esta función automáticamente.-
qkv
—torch.Tensor
de la siguiente forma:(batch_size x seqlen x (3 x num_heads) x head_size)
o(batch_size, (3 x num_heads) x seqlen x head_size)
, una tupla detorch.Tensors
cada una de las cuales puede tener forma(batch_size x seqlen x num_heads x head_size)
, o(batch_size x num_heads x seqlen x head_size)
. Se debe pasar un diseño de diseño adecuado en función de la forma. -
attn_mask
—torch.Tensor
de la siguiente forma.(batch_size x 1 x 1 x seqlen)
Para activar este parámetro de máscara de atención, se requierentriton_flash_attention=True
yuse_alibi=True
. Para aprender a generar una máscara de atención con este método, consulte los ejemplos de código enFlashAttention. El valor predeterminado esNone
. -
causal
— Si se establece enFalse
, que es el valor por defecto del argumento, no se aplica ninguna máscara. Si se establece enTrue
, elforward
método utiliza la máscara triangular inferior estándar. El valor predeterminado esFalse
. -
cast_dtype
— Cuando se establece en una determinadadtype
, proyecta losqkv
tensores en función de la posicióndtype
anteriorattn
. Esto es útil para implementaciones como el modelo Hugging Face Transformer GPT -NeoX, que tieneq
yk
con incrustaciones rotativas posteriores.fp32
Si se establece en, no se aplica ningún molde.None
El valor predeterminado esNone
. -
layout
(cadena): los valores disponibles sonb h s d
ob s h d
. Debe ajustarse a la disposición de losqkv
tensores pasados, de modo que se puedan aplicar las transformaciones adecuadas.attn
El valor predeterminado esb h s d
.
-
Devuelve
Un sencillo torch.Tensor
con forma. (batch_size x num_heads x
seq_len x head_size)
torch.sagemaker.nn.attn.FlashGroupedQueryAttention
Y API para usar FlashGroupedQueryAttention
con SMP V2. Para obtener más información sobre su usoAPI, consulteUtilice los FlashAttention núcleos para la atención de las consultas agrupadas.
class torch.sagemaker.nn.attn.FlashGroupedQueryAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, )
Parámetros
-
attention_dropout_prob
(flotante): la probabilidad de abandono que se aplica a la atención. El valor predeterminado es0.0
. -
scale
(flotante): si se aprueba, este factor de escala se aplica a softmax. Si se establece enNone
,1 / sqrt(attention_head_size)
se utiliza como factor de escala. El valor predeterminado esNone
.
Métodos
-
forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")
— Una función PyTorch de módulo normal. Cuandomodule(x)
se llama a, SMP ejecuta esta función automáticamente.-
q
—torch.Tensor
de la siguiente forma(batch_size x seqlen x num_heads x head_size)
o(batch_size x num_heads x seqlen x head_size)
. Se debe aprobar el arg de diseño adecuado en función de la forma. -
kv
—torch.Tensor
de la siguiente forma(batch_size x seqlen x (2 x num_heads) x head_size)
o(batch_size, (2 x num_heads) x seqlen x head_size)
, o una tupla de dostorch.Tensor
s, cada una de las cuales puede tener la forma(batch_size x seqlen x num_heads x head_size)
o.(batch_size x num_heads x seqlen x head_size)
También se debe pasar ellayout
argumento apropiado en función de la forma. -
causal
— Cuando se establece enFalse
, que es el valor por defecto del argumento, no se aplica ninguna máscara. Si se establece enTrue
, elforward
método utiliza la máscara triangular inferior estándar. El valor predeterminado esFalse
. -
cast_dtype
— Cuando se establece en un tipo d en particular, proyecta losqkv
tensores a ese tipo d anterior.attn
Esto es útil para implementaciones como Hugging Face Transformers GPT -NeoX, que tiene incrustaciones posteriores a la rotación.q,k
fp32
Si se establece en, no se aplica ningún molde.None
El valor predeterminado esNone
. -
diseño (cadena): los valores disponibles son
"b h s d"
o"b s h d"
. Debe ajustarse al diseño de losqkv
tensores pasados, de modo que se puedan aplicar las transformaciones adecuadas.attn
El valor predeterminado es"b h s d"
.
-
Devuelve
Devuelve un sencillo torch.Tensor (batch_size x num_heads x seq_len x
head_size)
que representa el resultado del cálculo de la atención.
torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention
Y API eso es compatible con FlashAttention el modelo Llama. Esto API usa el torch.sagemaker.nn.attn.FlashGroupedQueryAttention API a un nivel bajo. Para aprender a usarlo, consulteUtilice los FlashAttention núcleos para la atención de las consultas agrupadas.
class torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention( config: LlamaConfig )
Parámetros
-
config
— Una FlashAttention configuración para el modelo Llama.
Métodos
-
forward(self, hidden_states, attention_mask, position_ids, past_key_value, output_attentions, use_cache)
-
hidden_states
(torch.Tensor
) — Estados ocultos de un tensor en forma de(batch_size x seq_len x num_heads x head_size)
. -
attention_mask
(torch.LongTensor
) — Máscara para evitar prestar atención a rellenar los índices simbólicos en forma de.(batch_size x seqlen)
El valor predeterminado esNone
. -
position_ids
(torch.LongTensor
) — Cuando no lo estáNone
, tiene la forma de(batch_size x seqlen)
indicar los índices de posición de cada token de secuencia de entrada en las incrustaciones de posiciones. El valor predeterminado esNone
. -
past_key_value
(Caché): estados ocultos precalculados (clave y valores en los bloques de autoatención y en los bloques de atención cruzada). El valor predeterminado esNone
. -
output_attentions
(bool): indica si se deben devolver los tensores de atención de todas las capas de atención. El valor predeterminado esFalse
. -
use_cache
(bool): indica si se deben devolverpast_key_values
los estados de los valores clave. El valor predeterminado esFalse
.
-
Devuelve
Devuelve un sencillo torch.Tensor (batch_size x num_heads x seq_len x
head_size)
que representa el resultado del cálculo de la atención.
torch.sagemaker.transform
SMPLa versión 2 lo proporciona torch.sagemaker.transform()
API para transformar los modelos de Hugging Face Transformer en implementaciones de modelos SMP y habilitar SMP el paralelismo tensorial.
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 mantiene las políticas de transformación para el Modelos de Hugging Face Transformer compatibles con el paralelismo SMP tensorial al convertir la configuración de los modelos Hugging Face Transformer en la configuración SMP del transformador.
Parámetros
-
model
(torch.nn.Module
): un modelo Modelos de Hugging Face Transformer compatibles con el paralelismo SMP tensorial para transformar y aplicar la función de paralelismo tensorial de la biblioteca. SMP -
device
(torch.device
) — Si se aprueba, se crea un nuevo modelo en este dispositivo. Si el módulo original tiene algún parámetro en el metadispositivo (consulteInicialización retrasada de los parámetros), el módulo transformado también se creará en el metadispositivo, ignorando el argumento incluido aquí. El valor predeterminado esNone
. -
dtype
(torch.dtype
) — Si se aprueba, lo establece como el administrador de contexto de dtype para la creación del modelo y crea un modelo con este dtype. Por lo general, esto no es necesario, ya que queremos crear el modelofp32
cuando lo usamosMixedPrecision
, yfp32
es el dtype predeterminado. PyTorch El valor predeterminado esNone
. -
config
(dict): este es un diccionario para configurar el SMP transformador. El valor predeterminado esNone
. -
load_state_dict_from_rank0
(Boolean): de forma predeterminada, este módulo crea una nueva instancia del modelo con nuevos pesos. Cuando este argumento se establece enTrue
, SMP intenta cargar el diccionario de estados del PyTorch modelo original desde el rango 0 en el modelo transformado para el grupo paralelo de tensores del que forma parte el rango 0. Cuando se establece enTrue
, el rango 0 no puede tener ningún parámetro en el metadispositivo. Solo el primer grupo de tensores paralelos completa los pesos del rango 0 después de esta llamada a la transformación. Debe configurarloTrue
en el FSDP contenedorsync_module_states
para obtener estos pesos del primer grupo de tensores paralelos a todos los demás procesos. Con esta opción activada, la SMP biblioteca carga el diccionario de estados del modelo original. La SMP biblioteca toma el modelo antesstate_dict
de la transformación, lo convierte para que coincida con la estructura del modelo transformado, lo fragmenta para cada rango paralelo de tensores, comunica este estado del rango 0 a otros rangos del grupo de tensores paralelos del que forma parte el rango 0 y lo carga. El valor predeterminado esFalse
.
Devuelve
Devuelve un modelo transformado con el que puedes ajustarlo PyTorch FSDP. Cuando load_state_dict_from_rank0
se establece enTrue
, el grupo paralelo de tensores que implica el rango 0 tiene pesos cargados del diccionario de estados original en el rango 0. Cuando se utilizan Inicialización retrasada de los parámetros en el modelo original, solo estos rangos tienen los tensores reales activados CPUs para los parámetros y los búferes del modelo transformado. El resto de los rangos siguen teniendo los parámetros y los búferes en el metadispositivo para ahorrar memoria.
torch.sagemaker
Funciones y propiedades de util
funciones de utilidad torch.sagemaker
-
torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None
— Inicializa el trabajo de entrenamiento con. PyTorch SMP -
torch.sagemaker.is_initialized() -> bool
— Comprueba si el trabajo de formación se inicializa con. SMP Al volver a la versión nativa PyTorch mientras se inicializa el trabajoSMP, algunas de las propiedades no son relevantes y pasan a serNone
, tal y como se indica en la siguiente lista de propiedades. -
torch.sagemaker.utils.module_utils.empty_module_params(module: nn.Module, device: Optional[torch.device] = None, recurse: bool = False) -> nn.Module
— Crea parámetros vacíos en lo dado,device
si los hay, y puede ser recursivo para todos los módulos anidados si se especifica. -
torch.sagemaker.utils.module_utils.move_buffers_to_device(module: nn.Module, device: torch.device, recurse: bool = False) -> nn.Module
— Mueve los búferes de los módulos a un valor determinado ydevice
, si se especifica, puede ser recursivo para todos los módulos anidados.
Propiedades
torch.sagemaker.state
contiene varias propiedades útiles después de la inicialización de with. SMP torch.sagemaker.init
-
torch.sagemaker.state.hybrid_shard_degree
(int): el grado de paralelismo de los datos fragmentados, una copia de la entrada del usuario en la configuración a la que se ha pasado. SMPtorch.sagemaker.init()
Para obtener más información, consulte Utilice la biblioteca de paralelismo de SageMaker modelos v2. -
torch.sagemaker.state.rank
(int): la clasificación global del dispositivo, en el rango de.[0, world_size)
-
torch.sagemaker.state.rep_rank_process_group
(torch.distributed.ProcessGroup
): el grupo de procesos que incluye todos los dispositivos con el mismo rango de replicación. Observe la diferencia sutil pero fundamental contorch.sagemaker.state.tp_process_group
. Cuando vuelve a ser nativo PyTorch, regresaNone
. -
torch.sagemaker.state.tensor_parallel_degree
(int): el grado de paralelismo del tensor, una copia de la entrada del usuario en la configuración a la SMP que se ha pasado.torch.sagemaker.init()
Para obtener más información, consulte Utilice la biblioteca de paralelismo de SageMaker modelos v2. -
torch.sagemaker.state.tp_size
(int): un alias para.torch.sagemaker.state.tensor_parallel_degree
-
torch.sagemaker.state.tp_rank
(int) — El rango de paralelismo del tensor para el dispositivo en el rango de[0, tp_size)
, determinado por el grado de paralelismo del tensor y el mecanismo de clasificación. -
torch.sagemaker.state.tp_process_group
(torch.distributed.ProcessGroup
): el grupo de procesos tensoriales paralelos que incluye todos los dispositivos con el mismo rango en otras dimensiones (por ejemplo, paralelismo y replicación de datos fragmentados) pero con rangos tensoriales paralelos únicos. Al volver al modo nativo, vuelve. PyTorchNone
-
torch.sagemaker.state.world_size
(int): la cantidad total de dispositivos utilizados en el entrenamiento.
Actualización de la versión SMP 1 a la SMP versión 2
Para pasar de la SMP v1 a la SMP v2, debe realizar cambios en el script para eliminar la SMP v1 APIs y aplicar la SMP v2APIs. En lugar de partir del script SMP de la versión 1, le recomendamos que comience con un PyTorch FSDP script y siga las instrucciones que se indican enUtilice la biblioteca de paralelismo de SageMaker modelos v2.
Para llevar los modelos SMP v1 a la SMP v2, en la SMP v1 debes recopilar el diccionario de estados del modelo completo y aplicar las funciones de traducción del diccionario de estados del modelo para convertirlo al formato de punto de control del modelo Hugging Face Transformers. Luego, en la SMP versión 2, como se explica enCompruebe la posición utilizando SMP, puedes cargar los puntos de control del modelo Hugging Face Transformers y luego continuar usando PyTorch el punto de control con la APIs v2. SMP Para usarlo SMP con tu PyTorch FSDP modelo, asegúrate de pasar a la SMP versión 2 y de realizar cambios en el guion de entrenamiento para usarlo PyTorch FSDP y en otras funciones más recientes.
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, )
Para ver las funciones de traducción disponibles en la SMP versión 1, consulteSoporte listo para usar para modelos Hugging Face Transformer.
Para obtener instrucciones sobre cómo guardar y cargar puntos de control de modelos en la SMP versión 2, consulteCompruebe la posición utilizando SMP.