Dağıtılmış GPU eğitim kılavuzu (SDK v1)
ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1
Azure Machine Learning'de (ML) dağıtılmış GPU eğitim kodunu kullanma hakkında daha fazla bilgi edinin. Bu makale size dağıtılmış eğitim hakkında bilgi vermez. Mevcut dağıtılmış eğitim kodunuzu Azure Machine Learning'de çalıştırmanıza yardımcı olur. Her çerçeve için izlemeniz gereken ipuçları ve örnekler sunar:
- İleti Geçirme Arabirimi (MPI)
- Horovod
- DeepSpeed
- Open MPI'dan ortam değişkenleri
- PyTorch
- İşlem grubu başlatma
- Başlatma seçenekleri
- DistributedDataParallel (işlem başlatma başına)
- Kullanma
torch.distributed.launch
(düğüm başına başlatma) - PyTorch Lightning
- Yüz Transformatörlerine Sarılma
- TensorFlow
- TensorFlow için ortam değişkenleri (TF_CONFIG)
- InfiniBand ile GPU eğitimini hızlandırma
Önkoşullar
Veri paralelliği, dağıtılmış veri paralelliği ve model paralelliği gibi dağıtılmış GPU eğitimine yönelik bu temel kavramları gözden geçirin.
İpucu
Hangi paralellik türünü kullanacağınızı bilmiyorsanız, zamanın %90'ından fazlasını Dağıtılmış Veri Paralelliği'ni kullanmanız gerekir.
MPI
Azure Machine Learning, her düğümde belirli sayıda işlem başlatmak için bir MPI işi sunar. Düğüm başına başlatıcı için 1 'e (varsayılan) veya işlem başlatıcısı başına cihaz/GPU sayısına eşit olarak, işlem başlatıcısı başına veya düğüm başına başlatıcıyı process_count_per_node
kullanarak dağıtılmış eğitim çalıştırmak için bu yaklaşımı benimseyebilirsiniz. Azure Machine Learning, arka planda tam MPI başlatma komutunu (mpirun
) oluşturur. veya DeepSpeed launcher
gibi mpirun
kendi tam baş düğüm başlatıcı komutlarınızı sağlayamazsınız.
İpucu
Azure Machine Learning MPI işi tarafından kullanılan temel Docker görüntüsünde bir MPI kitaplığının yüklü olması gerekir. Açık MPI, tüm Azure Machine Learning GPU temel görüntülerine dahildir. Özel bir Docker görüntüsü kullandığınızda, görüntünün bir MPI kitaplığı içerdiğinden emin olmak sizin sorumluluğunuzdadır. Açık MPI önerilir, ancak Intel MPI gibi farklı bir MPI uygulaması da kullanabilirsiniz. Azure Machine Learning ayrıca popüler çerçeveler için seçilmiş ortamlar sağlar.
MPI kullanarak dağıtılmış eğitimi çalıştırmak için şu adımları izleyin:
- Tercih edilen derin öğrenme çerçevesi ve MPI ile bir Azure Machine Learning ortamı kullanın. Azure Machine Learning, popüler çerçeveler için seçilmiş ortam sağlar.
- ve
node_count
ileprocess_count_per_node
tanımlayınMpiConfiguration
.process_count_per_node
işlem başına başlatma için düğüm başına GPU sayısına eşit olmalıdır veya kullanıcı betiği düğüm başına işlemleri başlatmaktan sorumlu olacaksa düğüm başına başlatma için 1 (varsayılan) olarak ayarlanmalıdır. MpiConfiguration
nesnesini parametresinedistributed_job_config
ScriptRunConfig
geçirin.
from azureml.core import Workspace, ScriptRunConfig, Environment, Experiment
from azureml.core.runconfig import MpiConfiguration
curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)
distr_config = MpiConfiguration(process_count_per_node=4, node_count=2)
run_config = ScriptRunConfig(
source_directory= './src',
script='train.py',
compute_target=compute_target,
environment=pytorch_env,
distributed_job_config=distr_config,
)
# submit the run configuration to start the job
run = Experiment(ws, "experiment_name").submit(run_config)
Horovod
Derin öğrenme çerçevesiyle dağıtılmış eğitim için Horovod kullanırken MPI iş yapılandırmasını kullanın.
Kodunuzun şu ipuçlarına uydığından emin olun:
- Eğitim kodu, Azure Machine Learning bölümlerini eklemeden önce Horovod ile doğru şekilde izleniyor
- Azure Machine Learning ortamınız Horovod ve MPI içerir. PyTorch ve TensorFlow tarafından seçilen GPU ortamları Horovod ve bağımlılıklarıyla önceden yapılandırılmış olarak gelir.
- İstediğiniz dağıtımla bir
MpiConfiguration
oluşturun.
Horovod örneği
DeepSpeed
Azure Machine Learning'de DeepSpeed kitaplığıyla dağıtılmış eğitim çalıştırmak için DeepSpeed'in özel başlatıcısını kullanmayın. Bunun yerine, MPI ile eğitim işini başlatmak için bir MPI işi yapılandırın.
Kodunuzun şu ipuçlarına uydığından emin olun:
- Azure Machine Learning ortamınızda DeepSpeed ve bağımlılıkları, Open MPI ve mpi4py bulunur.
- Dağıtımınızla bir
MpiConfiguration
oluşturun.
DeepSpeed örneği
Open MPI'dan ortam değişkenleri
MPI işlerini Open MPI görüntüleriyle çalıştırırken, her işlem için aşağıdaki ortam değişkenleri başlatılır:
OMPI_COMM_WORLD_RANK
- sürecin sırasıOMPI_COMM_WORLD_SIZE
- dünya boyutuAZ_BATCH_MASTER_NODE
- bağlantı noktası ile birincil adres,MASTER_ADDR:MASTER_PORT
OMPI_COMM_WORLD_LOCAL_RANK
- düğümdeki işlemin yerel sırasıOMPI_COMM_WORLD_LOCAL_SIZE
- düğümdeki işlem sayısı
İpucu
Adına rağmen ortam değişkeni OMPI_COMM_WORLD_NODE_RANK
öğesine NODE_RANK
karşılık gelmez. Düğüm başına başlatıcıyı kullanmak için olarak ayarlayın process_count_per_node=1
ve kullanın OMPI_COMM_WORLD_RANK
NODE_RANK
.
PyTorch
Azure Machine Learning, PyTorch'un yerel dağıtılmış eğitim özelliklerini (torch.distributed
) kullanarak dağıtılmış işlerin çalıştırılmasını destekler.
İpucu
Veri paralelliği için, resmi PyTorch kılavuzu hem tek düğümlü hem de çok düğümlü dağıtılmış eğitim için DataParallel üzerinden DistributedDataParallel (DDP) kullanmaktır. PyTorch, çok işlemli paket üzerinden DistributedDataParallel kullanılmasını da önerir. Bu nedenle Azure Machine Learning belgeleri ve örnekleri DistributedDataParallel eğitimine odaklanacaktır.
İşlem grubu başlatma
Herhangi bir dağıtılmış eğitimin omurgası, birbirini bilen ve arka uç kullanarak birbirleriyle iletişim kurabilen bir grup işleme dayanır. PyTorch için işlem grubu, toplu olarak bir işlem grubu oluşturmak üzere tüm dağıtılmış işlemlerde torch.distributed.init_process_group çağrılarak oluşturulur.
torch.distributed.init_process_group(backend='nccl', init_method='env://', ...)
Kullanılan en yaygın iletişim arka uçları , nccl
ve gloo
'dirmpi
. GPU tabanlı eğitim nccl
için en iyi performans için önerilir ve mümkün olduğunda kullanılmalıdır.
init_method
her işlemin birbirini nasıl bulabileceğini, iletişim arka ucu kullanarak işlem grubunu nasıl başlatıp doğruladıklarını bildirir. Varsayılan olarak belirtilmezse init_method
PyTorch ortam değişkeni başlatma yöntemini (env://
) kullanır. init_method
, Azure Machine Learning'de dağıtılmış PyTorch çalıştırmak için eğitim kodunuzda kullanmanız önerilen başlatma yöntemidir. PyTorch başlatma için aşağıdaki ortam değişkenlerini arar:
MASTER_ADDR
- 0 derecesine sahip işlemi barındıracak makinenin IP adresi.MASTER_PORT
- 0 derecesine sahip işlemi barındıracak makinede ücretsiz bir bağlantı noktası.WORLD_SIZE
- Toplam işlem sayısı. Dağıtılmış eğitim için kullanılan toplam cihaz sayısına (GPU) eşit olmalıdır.RANK
- Geçerli işlemin (genel) sırası. Olası değerler 0 ile (dünya boyutu - 1) arasıdır.
İşlem grubu başlatma hakkında daha fazla bilgi için PyTorch belgelerine bakın.
Bunların ötesinde, birçok uygulama aşağıdaki ortam değişkenlerine de ihtiyaç duyar:
LOCAL_RANK
- Düğümün içindeki işlemin yerel (göreli) sırası. Olası değerler 0 ile (düğümdeki işlem sayısı: 1) arasıdır. Bu bilgiler yararlıdır çünkü veri hazırlama gibi birçok işlem genellikle local_rank = 0 üzerinde --- düğüm başına yalnızca bir kez gerçekleştirilmelidir.NODE_RANK
- Çok düğümlü eğitim için düğümün sırası. Olası değerler 0 ile (toplam düğüm sayısı - 1) olur.
PyTorch başlatma seçenekleri
Azure Machine Learning PyTorch işi, dağıtılmış eğitimi başlatmak için iki tür seçeneği destekler:
- İşlem başlatıcısı başına: Sistem, işlem grubunu ayarlamak için tüm ilgili bilgilerle (ortam değişkenleri gibi) sizin için tüm dağıtılmış işlemleri başlatır.
- Düğüm başına başlatıcı: Azure Machine Learning'e her düğümde çalıştırılacak yardımcı program başlatıcısını sağlarsınız. Yardımcı program başlatıcı, belirli bir düğümdeki işlemlerin her birini başlatmayı işler. Her düğümde
RANK
yerel olarak bulunur veLOCAL_RANK
başlatıcı tarafından ayarlanır. Torch.distributed.launch yardımcı programı ve PyTorch Lightning bu kategoriye aittir.
Bu başlatma seçenekleri arasında temel bir fark yoktur. Seçim büyük ölçüde tercihinize veya vanilya PyTorch üzerinde oluşturulan çerçevelerin/kitaplıkların kurallarına (Şimşek veya Sarılma Yüzü gibi) bağlıdır.
Aşağıdaki bölümlerde, başlatma seçeneklerinin her biri için Azure Machine Learning PyTorch işlerini yapılandırma hakkında daha ayrıntılı bilgi ve bulabilirsiniz.
DistributedDataParallel (işlem başlatma başına)
gibi torch.distributed.launch
bir başlatıcı yardımcı programı kullanmanız gerekmez. Dağıtılmış bir PyTorch işini çalıştırmak için:
- Eğitim betiğini ve bağımsız değişkenlerini belirtme
PyTorchConfiguration
bir oluşturun ve venode_count
değeriniprocess_count
belirtin. ,process_count
işiniz için çalıştırmak istediğiniz toplam işlem sayısına karşılık gelir.process_count
genellikle eşit# GPUs per node x # nodes
olmalıdır. Belirtilmezseprocess_count
, Azure Machine Learning varsayılan olarak düğüm başına bir işlem başlatır.
Azure Machine Learning her düğümde MASTER_ADDR
, MASTER_PORT
, WORLD_SIZE
ve NODE_RANK
ortam değişkenlerini, işlem düzeyi RANK
ile LOCAL_RANK
ortam değişkenlerini de ayarlar.
Düğüm başına çok işlemli eğitim için bu seçeneği kullanmak için Azure Machine Learning Python SDK'sını >= 1.22.0
kullanın. Process_count 1.22.0'da kullanıma sunulmuştur.
from azureml.core import ScriptRunConfig, Environment, Experiment
from azureml.core.runconfig import PyTorchConfiguration
curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)
distr_config = PyTorchConfiguration(process_count=8, node_count=2)
run_config = ScriptRunConfig(
source_directory='./src',
script='train.py',
arguments=['--epochs', 50],
compute_target=compute_target,
environment=pytorch_env,
distributed_job_config=distr_config,
)
run = Experiment(ws, 'experiment_name').submit(run_config)
İpucu
Eğitim betiğiniz yerel sıralama veya sıralama gibi bilgileri betik bağımsız değişkenleri olarak geçirirse, bağımsız değişkenlerde ortam değişkenlerine başvurabilirsiniz:
arguments=['--epochs', 50, '--local_rank', $LOCAL_RANK]
Pytorch işlem başına başlatma örneği
torch.distributed.launch kullanma (düğüm başına-başlatma)
PyTorch, torch.distributed.launch içinde düğüm başına birden çok işlemi başlatmak için kullanabileceğiniz bir başlatma yardımcı programı sağlar. Modül, torch.distributed.launch
düğümlerin her birinde birden çok eğitim işlemi oluşturur.
Aşağıdaki adımlar, Azure Machine Learning'de düğüm başına başlatıcı ile pyTorch işini yapılandırmayı gösterir. İş, aşağıdaki komutu çalıştırmanın eşdeğerini elde eder:
python -m torch.distributed.launch --nproc_per_node <num processes per node> \
--nnodes <num nodes> --node_rank $NODE_RANK --master_addr $MASTER_ADDR \
--master_port $MASTER_PORT --use_env \
<your training script> <your script arguments>
- Oluşturucunun
torch.distributed.launch
command
parametresineScriptRunConfig
komutunu sağlayın. Azure Machine Learning, eğitim kümenizin her düğümünde bu komutu çalıştırır.--nproc_per_node
her düğümde kullanılabilen GPU sayısından küçük veya buna eşit olmalıdır. MASTER_ADDR, MASTER_PORT ve NODE_RANK, Azure Machine Learning tarafından ayarlandığından, komuttaki ortam değişkenlerine başvurabilirsiniz. Azure Machine Learning MASTER_PORT6105
olarak ayarlar, ancak isterseniz torch.distributed.launch komutunun bağımsız değişkenine--master_port
farklı bir değer geçirebilirsiniz. (Başlatma yardımcı programı ortam değişkenlerini sıfırlar.) - bir
PyTorchConfiguration
oluşturun ve belirtinnode_count
.
from azureml.core import ScriptRunConfig, Environment, Experiment
from azureml.core.runconfig import PyTorchConfiguration
curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)
distr_config = PyTorchConfiguration(node_count=2)
launch_cmd = "python -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank $NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT --use_env train.py --epochs 50".split()
run_config = ScriptRunConfig(
source_directory='./src',
command=launch_cmd,
compute_target=compute_target,
environment=pytorch_env,
distributed_job_config=distr_config,
)
run = Experiment(ws, 'experiment_name').submit(run_config)
İpucu
Tek düğümlü çoklu GPU eğitimi: Tek düğümlü çoklu GPU PyTorch eğitimini çalıştırmak için başlatma yardımcı programını kullanıyorsanız ScriptRunConfig parametresini belirtmeniz distributed_job_config
gerekmez.
launch_cmd = "python -m torch.distributed.launch --nproc_per_node 4 --use_env train.py --epochs 50".split()
run_config = ScriptRunConfig(
source_directory='./src',
command=launch_cmd,
compute_target=compute_target,
environment=pytorch_env,
)
PyTorch düğüm başına başlatma örneği
PyTorch Lightning
PyTorch Lightning , PyTorch için üst düzey bir arabirim sağlayan basit bir açık kaynak kitaplığıdır. Lightning, vanilya PyTorch için gereken alt düzey dağıtılmış eğitim yapılandırmalarının çoğunu soyutlar. Lightning, eğitim betiklerinizi tek GPU, tek düğümlü çoklu GPU ve çok düğümlü çoklu GPU ayarlarında çalıştırmanıza olanak tanır. Sahne arkasında, sizin için benzeri torch.distributed.launch
birden çok işlem başlatır.
Tek düğümlü eğitim (tek düğümlü çoklu GPU dahil) için, kodunuzu bir distributed_job_config
belirtmenize gerek kalmadan Azure Machine Learning'de çalıştırabilirsiniz.
Birden çok GPU'ya sahip birden çok düğüm kullanarak deneme çalıştırmak için 2 seçenek vardır:
PyTorch yapılandırmasını kullanma (önerilen): ,
node_count
ve değerlerini tanımlayınPyTorchConfiguration
veprocess_count
belirtincommunication_backend="Nccl"
(bunun toplam işlem sayısı (örneğin)num_nodes * process_count_per_node
olduğunu unutmayın). Lightning Trainer modülünde hem hem denum_nodes
gpus
ilePyTorchConfiguration
tutarlı olacak şekilde belirtin. Örneğin,num_nodes = node_count
vegpus = process_count_per_node
.MPI Yapılandırmasını Kullanma:
hem hem de
node_count
öğesini tanımlayınMpiConfiguration
veprocess_count_per_node
belirtin. Lightning Trainer'da, hem hemgpus
denum_nodes
öğesinin sırasıyla veprocess_count_per_node
ileMpiConfiguration
aynınode_count
olmasını belirtin.MPI ile çok düğümlü eğitim için Lightning, eğitim kümenizin her düğümünde aşağıdaki ortam değişkenlerinin ayarlanmasını gerektirir:
- MASTER_ADDR
- MASTER_PORT
- NODE_RANK
- LOCAL_RANK
Lightning'in gerektirdiği bu ortam değişkenlerini ana eğitim betiklerinde el ile ayarlayın:
import os from argparse import ArgumentParser def set_environment_variables_for_mpi(num_nodes, gpus_per_node, master_port=54965): if num_nodes > 1: os.environ["MASTER_ADDR"], os.environ["MASTER_PORT"] = os.environ["AZ_BATCH_MASTER_NODE"].split(":") else: os.environ["MASTER_ADDR"] = os.environ["AZ_BATCHAI_MPI_MASTER_NODE"] os.environ["MASTER_PORT"] = str(master_port) try: os.environ["NODE_RANK"] = str(int(os.environ.get("OMPI_COMM_WORLD_RANK")) // gpus_per_node) # additional variables os.environ["MASTER_ADDRESS"] = os.environ["MASTER_ADDR"] os.environ["LOCAL_RANK"] = os.environ["OMPI_COMM_WORLD_LOCAL_RANK"] os.environ["WORLD_SIZE"] = os.environ["OMPI_COMM_WORLD_SIZE"] except: # fails when used with pytorch configuration instead of mpi pass if __name__ == "__main__": parser = ArgumentParser() parser.add_argument("--num_nodes", type=int, required=True) parser.add_argument("--gpus_per_node", type=int, required=True) args = parser.parse_args() set_environment_variables_for_mpi(args.num_nodes, args.gpus_per_node) trainer = Trainer( num_nodes=args.num_nodes, gpus=args.gpus_per_node )
Lightning, Trainer bayraklarından ve
--num_nodes
'den dünya boyutunu hesaplamayı sağlar--gpus
.from azureml.core import ScriptRunConfig, Experiment from azureml.core.runconfig import MpiConfiguration nnodes = 2 gpus_per_node = 4 args = ['--max_epochs', 50, '--gpus_per_node', gpus_per_node, '--accelerator', 'ddp', '--num_nodes', nnodes] distr_config = MpiConfiguration(node_count=nnodes, process_count_per_node=gpus_per_node) run_config = ScriptRunConfig( source_directory='./src', script='train.py', arguments=args, compute_target=compute_target, environment=pytorch_env, distributed_job_config=distr_config, ) run = Experiment(ws, 'experiment_name').submit(run_config)
Yüz Transformatörlerine Sarılma
Yüzü Kucaklama, dağıtılmış eğitimi çalıştırmak için Transformers kitaplığını ile torch.distributed.launch
kullanmak için birçok örnek sağlar. Transformers Trainer API'sini kullanarak bu örnekleri ve kendi özel eğitim betiklerinizi çalıştırmak için Kullanma torch.distributed.launch
bölümünü izleyin.
8 GPU'ya sahip bir düğümde betiği kullanarak run_glue.py
MNLI metin sınıflandırması görevinde BERT büyük modeline ince ayar yapmak için örnek iş yapılandırma kodu:
from azureml.core import ScriptRunConfig
from azureml.core.runconfig import PyTorchConfiguration
distr_config = PyTorchConfiguration() # node_count defaults to 1
launch_cmd = "python -m torch.distributed.launch --nproc_per_node 8 text-classification/run_glue.py --model_name_or_path bert-large-uncased-whole-word-masking --task_name mnli --do_train --do_eval --max_seq_length 128 --per_device_train_batch_size 8 --learning_rate 2e-5 --num_train_epochs 3.0 --output_dir /tmp/mnli_output".split()
run_config = ScriptRunConfig(
source_directory='./src',
command=launch_cmd,
compute_target=compute_target,
environment=pytorch_env,
distributed_job_config=distr_config,
)
Dağıtılmış eğitimi kullanmadan çalıştırmak için işlem başına başlatma seçeneğini de kullanabilirsiniz.torch.distributed.launch
Bu yöntemi kullanıyorsanız aklınızda bulundurmanız gereken bir şey, transformers TrainingArguments'ın yerel derecelendirmenin bağımsız değişken (--local_rank
) olarak geçirilmesini beklemesidir. torch.distributed.launch
bunu yaparken --use_env=False
halleder, ancak işlem başına başlatmayı kullanıyorsanız, Azure Machine Learning yalnızca ortam değişkenini ayarlarken eğitim betiğine --local_rank=$LOCAL_RANK
bağımsız değişken olarak yerel sıralamayı LOCAL_RANK
açıkça geçirmeniz gerekir.
TensorFlow
Eğitim kodunuzda TensorFlow 2.x'in tf.distribute.Strategy
API'si gibi yerel dağıtılmış TensorFlow kullanıyorsanız, dağıtılmış işi kullanarak TensorflowConfiguration
Azure Machine Learning aracılığıyla başlatabilirsiniz.
Bunu yapmak için oluşturucunun distributed_job_config
parametresine ScriptRunConfig
bir TensorflowConfiguration
nesne belirtin. kullanıyorsanıztf.distribute.experimental.MultiWorkerMirroredStrategy
, eğitim işinizin TensorflowConfiguration
düğüm sayısına karşılık gelen içinde öğesini belirtinworker_count
.
from azureml.core import ScriptRunConfig, Environment, Experiment
from azureml.core.runconfig import TensorflowConfiguration
curated_env_name = 'AzureML-TensorFlow-2.3-GPU'
tf_env = Environment.get(workspace=ws, name=curated_env_name)
distr_config = TensorflowConfiguration(worker_count=2, parameter_server_count=0)
run_config = ScriptRunConfig(
source_directory='./src',
script='train.py',
compute_target=compute_target,
environment=tf_env,
distributed_job_config=distr_config,
)
# submit the run configuration to start the job
run = Experiment(ws, "experiment_name").submit(run_config)
Eğitim betiğiniz, eski TensorFlow 1.x gibi dağıtılmış eğitim için parametre sunucusu stratejisini kullanıyorsa, işte kullanılacak parametre sunucularının sayısını da belirtmeniz gerekir. Örneğin, tf_config = TensorflowConfiguration(worker_count=2, parameter_server_count=1)
.
TF_CONFIG
TensorFlow'da, birden çok makinede eğitim için TF_CONFIG ortam değişkeni gereklidir. TensorFlow işleri için Azure Machine Learning, eğitim betiğinizi yürütmeden önce TF_CONFIG değişkenini her çalışan için uygun şekilde yapılandırıp ayarlar.
eğitim betiğinizden TF_CONFIG erişebilirsiniz: os.environ['TF_CONFIG']
.
Bir baş çalışan düğümünde ayarlanan örnek TF_CONFIG:
TF_CONFIG='{
"cluster": {
"worker": ["host0:2222", "host1:2222"]
},
"task": {"type": "worker", "index": 0},
"environment": "cloud"
}'
TensorFlow örneği
InfiniBand ile dağıtılmış GPU eğitimini hızlandırma
Modeli eğiten VM sayısı arttıkça, modeli eğitmek için gereken süre azalmalıdır. İdeal olarak zamandaki azalma, eğitim VM'lerinin sayısıyla doğrusal olarak orantılı olmalıdır. Örneğin, bir modelin bir VM'de eğitilmesi 100 saniye sürüyorsa, aynı modeli iki VM üzerinde eğitme ideal olarak 50 saniye sürmelidir. Modelin dört VM üzerinde eğitilmesi 25 saniye sürmelidir ve bu şekilde devam eder.
InfiniBand, bu doğrusal ölçeklendirmenin elde edilmesinde önemli bir faktör olabilir. InfiniBand, bir kümedeki düğümler arasında düşük gecikme süreli GPU'ya iletişim sağlar. InfiniBand'in çalışması için özel donanım gerekir. Belirli Azure VM serisi, özellikle NC, ND ve H serisi, artık SR-IOV ve InfiniBand desteğine sahip RDMA özellikli VM'lere sahiptir. Bu VM'ler, Ethernet tabanlı bağlantıdan çok daha yüksek performanslı olan düşük gecikme süresi ve yüksek bant genişliğine sahip InfiniBand ağı üzerinden iletişim kurar. InfiniBand için SR-IOV, herhangi bir MPI kitaplığı için neredeyse çıplak performans sağlar (MPI, NVIDIA'nın NCCL yazılımı da dahil olmak üzere birçok dağıtılmış eğitim çerçevesi ve aracı tarafından kullanılır.) Bu SKU'lar hesaplama açısından yoğun, GPU tarafından erişimli makine öğrenmesi iş yüklerinin gereksinimlerini karşılamaya yöneliktir. Daha fazla bilgi için bkz . SR-IOV ile Azure Machine Learning'de Dağıtılmış Eğitimi Hızlandırma.
Normalde, adında 'r' olan VM SKU'ları gerekli InfiniBand donanımını içerir ve 'r' olmayanlar genellikle içermez. ('r', "uzaktan doğrudan bellek erişimi" anlamına gelen RDMA başvurusudur.) Örneğin, VM SKU'su Standard_NC24rs_v3
InfiniBand özelliklidir, ancak SKU Standard_NC24s_v3
etkin değildir. InfiniBand özelliklerinin yanı sıra, bu iki SKU arasındaki belirtimler büyük ölçüde aynıdır; her ikisi de 24 çekirdek, 448 GB RAM, aynı SKU'nun 4 GPU'su vb. içerir. RDMA ve InfiniBand özellikli makine SKU'ları hakkında daha fazla bilgi edinin.
Uyarı
Eski nesil makine SKU'su Standard_NC24r
RDMA özelliklidir, ancak InfiniBand için gereken SR-IOV donanımını içermez.
Bu RDMA özellikli, InfiniBand özellikli boyutlardan birinin kümesini oluşturursanız AmlCompute
, işletim sistemi görüntüsü InfiniBand'i önceden yüklenmiş ve önceden yapılandırılmış olarak etkinleştirmek için gereken Mellanox OFED sürücüsüyle birlikte gelir.