🕷️ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 168 (from laksa161)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

📄
INDEXABLE
CRAWLED
7 months ago
🤖
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH7.5 months ago (distributed domain, exempt)
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch
Last Crawled2025-09-12 19:47:49 (7 months ago)
First Indexednot set
HTTP Status Code200
Content
Meta Title教程:使用 Horovod 和 PyTorch 进行分布式训练(已弃用) - Azure Synapse Analytics | Microsoft Learn
Meta Description有关如何使用 Horovod 估算器和 PyTorch 运行分布式训练的教程
Meta Canonicalnull
Boilerpipe Text
Horovod 是一个分布式训练框架,适用于 TensorFlow 和 PyTorch 等库。 使用 Horovod,用户只需几行代码即可纵向扩展现有训练脚本,以在数百个 GPU 上运行。 在 Azure Synapse Analytics 中,用户可以使用默认的 Apache Spark 3 运行时快速开始使用 Horovod。 对于使用 PyTorch 的 Spark ML 管道应用程序,用户可以使用 horovod.spark 估算器 API。 此笔记本使用 Apache Spark 数据帧在 MNIST 数据集上执行分布式神经网络 (DNN) 模型的分布式训练。 本教程使用 PyTorch 和 Horovod 估算器运行训练过程。 先决条件 注意 已启用 Azure Synapse GPU 的池的预览版现已弃用。 配置 Apache Spark 会话 在会话开始时,我们需要配置一些 Apache Spark 设置。 在大多数情况下,只需设置 numExecutors 和 spark.rapids.memory.gpu.reserve。 对于大型模型,用户可能还需要配置 spark.kryoserializer.buffer.max 设置。 对于 TensorFlow 模型,用户需要将 spark.executorEnv.TF_FORCE_GPU_ALLOW_GROWTH 设置为 true。 在此示例中,你可以看到如何使用 %%configure 命令传递 Spark 配置。 Apache Spark 配置文档 中详细解释了每个参数的含义。 提供的值是建议用于 Azure Synapse GPU 大型池的最佳做法值。 %%configure -f { "driverMemory": "30g", "driverCores": 4, "executorMemory": "60g", "executorCores": 12, "numExecutors": 3, "conf":{ "spark.rapids.memory.gpu.reserve": "10g", "spark.executorEnv.TF_FORCE_GPU_ALLOW_GROWTH": "true", "spark.kryoserializer.buffer.max": "2000m" } } 在本教程中,我们将使用以下配置: %%configure -f { "numExecutors": 3, "conf":{ "spark.rapids.memory.gpu.reserve": "10g" } } 注意 使用 Horovod 进行训练时,用户应将 numExecutors 的 Spark 配置设置为小于或等于节点数。 导入依赖项 在本教程中,我们使用 PySpark 读取和处理数据集。 然后使用 PyTorch 和 Horovod 构建分布式神经网络 (DNN) 模型并运行训练过程。 若要开始操作,需要导入以下依赖项: # base libs import sys import uuid # numpy import numpy as np # pyspark related import pyspark import pyspark.sql.types as T from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.sql import SparkSession from pyspark.sql.functions import udf # pytorch related import torch.nn as nn import torch.nn.functional as F import torch.optim as optim # horovod related import horovod.spark.torch as hvd from horovod.spark.common.backend import SparkBackend from horovod.spark.common.store import Store # azure related from azure.synapse.ml.horovodutils import AdlsStore 连接到备用存储帐户 需要使用 Azure Data Lake Storage (ADLS) 帐户来存储中间数据和模型数据。 如果使用备用存储帐户,请确保设置 链接服务 以自动对帐户进行身份验证和读取。 此外,还需要修改以下属性: remote_url 、 account_name 和 linked_service_name 。 num_proc = 3 # equal to numExecutors batch_size = 128 epochs = 3 lr_single_node = 0.01 # learning rate for single node code uuid_str = str(uuid.uuid4()) # with uuid, each run will use a new directory work_dir = '/tmp/' + uuid_str # create adls store for model training, use your own adls account info remote_url = "<<ABFS path to storage account>>" account_name = "<<name of storage account>>" linked_service_name = "<<name of linked service>>" sas_token = TokenLibrary.getConnectionString(linked_service_name) adls_store_path = remote_url + work_dir store = AdlsStore.create(adls_store_path, storage_options={ 'account_name': account_name, 'sas_token': sas_token }, save_runs=True) print(adls_store_path) 准备数据集 接下来,我们将准备用于训练的数据集。 在本教程中,我们将使用 Azure 开放数据集 中的 MNIST 数据集。 # Initialize SparkSession spark = SparkSession.builder.getOrCreate() # Download MNIST dataset from Azure Open Datasets from azureml.opendatasets import MNIST mnist = MNIST.get_tabular_dataset() mnist_df = mnist.to_pandas_dataframe() mnist_df.info() # Preprocess dataset mnist_df['features'] = mnist_df.iloc[:, :784].values.tolist() mnist_df.drop(mnist_df.iloc[:, :784], inplace=True, axis=1) mnist_df.head() 使用 Apache Spark 处理数据 现在,我们将创建 Apache Spark 数据帧。 此数据框将与 HorovodEstimator 一起用于训练。 # Create Spark DataFrame for training df = spark.createDataFrame(mnist_df) # repartition DataFrame for training train_df = df.repartition(num_proc) # Train/test split train_df, test_df = train_df.randomSplit([0.9, 0.1]) # show the dataset train_df.show() train_df.count() 定义 DNN 模型 完成数据集处理后,现在可以定义 PyTorch 模型。 同一代码还可用于训练单节点 PyTorch 模型。 # Define the PyTorch model without any Horovod-specific parameters class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 10, kernel_size=5) self.conv2 = nn.Conv2d(10, 20, kernel_size=5) self.conv2_drop = nn.Dropout2d() self.fc1 = nn.Linear(320, 50) self.fc2 = nn.Linear(50, 10) def forward(self, x): x = x.float() x = F.relu(F.max_pool2d(self.conv1(x), 2)) x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) x = x.view(-1, 320) x = F.relu(self.fc1(x)) x = F.dropout(x, training=self.training) x = self.fc2(x) return F.log_softmax(x) model = Net() optimizer = optim.SGD(model.parameters(), lr=lr_single_node * num_proc, momentum=0.5) # notice the lr is scaled up loss = nn.NLLLoss() 定型模型 现在,我们可以在 Apache Spark 数据帧的基础上训练 Horovod Spark 估算器。 # Train a Horovod Spark Estimator on the DataFrame backend = SparkBackend(num_proc=num_proc, stdout=sys.stdout, stderr=sys.stderr, prefix_output_with_timestamp=True) torch_estimator = hvd.TorchEstimator( backend=backend, store=store, partitions_per_process=1, # important for GPU training model=model, optimizer=optimizer, loss=lambda input, target: loss(input, target.long()), input_shapes=[[-1, 1, 28, 28]], feature_cols=['features'], label_cols=['label'], batch_size=batch_size, epochs=epochs, validation=0.1, verbose=2) torch_model = torch_estimator.fit(train_df).setOutputCols(['label_prob']) 评估已训练的模型 训练过程完成后,可以在测试数据集上评估模型。 # Evaluate the model on the held-out test DataFrame pred_df = torch_model.transform(test_df) argmax = udf(lambda v: float(np.argmax(v)), returnType=T.DoubleType()) pred_df = pred_df.withColumn('label_pred', argmax(pred_df.label_prob)) evaluator = MulticlassClassificationEvaluator(predictionCol='label_pred', labelCol='label', metricName='accuracy') print('Test accuracy:', evaluator.evaluate(pred_df)) 清理资源 为了确保关闭 Spark 实例,请结束任何已连接的会话(笔记本)。 达到 Apache Spark 池中指定的 空闲时间 时,池将会关闭。 也可以从笔记本右上角的状态栏中选择“停止会话”。 后续步骤
Markdown
[跳转至主内容](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch#main) [跳到 Ask Learn 聊天体验](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) 此浏览器不再受支持。 请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。 [下载 Microsoft Edge](https://go.microsoft.com/fwlink/p/?LinkID=2092881%20) [有关 Internet Explorer 和 Microsoft Edge 的详细信息](https://learn.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge) 目录 Exit editor mode 询问 Learn 询问 Learn Focus mode 目录 [使用英语阅读](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) 添加 添加到计划 *** #### 通过 [Facebook](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) [x.com 共享](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) [LinkedIn](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) [电子邮件](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) *** 打印 你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 <https://docs.azure.cn>。 *** 备注 访问此页面需要授权。 可以尝试[登录](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch)或[更改目录]()。 访问此页面需要授权。 可以尝试[更改目录]()。 # 教程:使用 Horovod 估算器和 PyTorch 进行分布式训练(已弃用) - 2025-06-05 反馈 ## 本文内容 [Horovod](https://github.com/horovod/horovod) 是一个分布式训练框架,适用于 TensorFlow 和 PyTorch 等库。 使用 Horovod,用户只需几行代码即可纵向扩展现有训练脚本,以在数百个 GPU 上运行。 在 Azure Synapse Analytics 中,用户可以使用默认的 Apache Spark 3 运行时快速开始使用 Horovod。 对于使用 PyTorch 的 Spark ML 管道应用程序,用户可以使用 horovod.spark 估算器 API。 此笔记本使用 Apache Spark 数据帧在 MNIST 数据集上执行分布式神经网络 (DNN) 模型的分布式训练。 本教程使用 PyTorch 和 Horovod 估算器运行训练过程。 ## 先决条件 - [Azure Synapse Analytics 工作区](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/get-started-create-workspace),其中 Azure Data Lake Storage Gen2 存储帐户配置为默认存储。 你需要成为所使用的 Data Lake Storage Gen2 文件系统的存储 Blob 数据参与者。 - 在 Azure Synapse Analytics 工作区中创建支持 GPU 的 Apache Spark 池。 有关详细信息,请参阅[在 Azure Synapse 中创建支持 GPU 的 Apache Spark 池](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/spark/apache-spark-gpu-concept)。 对于本教程,建议使用具有 3 个节点的大型 GPU 群集。 注意 已启用 Azure Synapse GPU 的池的预览版现已弃用。 ## 配置 Apache Spark 会话 在会话开始时,我们需要配置一些 Apache Spark 设置。 在大多数情况下,只需设置 numExecutors 和 spark.rapids.memory.gpu.reserve。 对于大型模型,用户可能还需要配置 `spark.kryoserializer.buffer.max` 设置。 对于 TensorFlow 模型,用户需要将 `spark.executorEnv.TF_FORCE_GPU_ALLOW_GROWTH` 设置为 true。 在此示例中,你可以看到如何使用 `%%configure` 命令传递 Spark 配置。 [Apache Spark 配置文档](https://spark.apache.org/docs/latest/configuration.html)中详细解释了每个参数的含义。 提供的值是建议用于 Azure Synapse GPU 大型池的最佳做法值。 ``` %%configure -f { "driverMemory": "30g", "driverCores": 4, "executorMemory": "60g", "executorCores": 12, "numExecutors": 3, "conf":{ "spark.rapids.memory.gpu.reserve": "10g", "spark.executorEnv.TF_FORCE_GPU_ALLOW_GROWTH": "true", "spark.kryoserializer.buffer.max": "2000m" } } ``` 在本教程中,我们将使用以下配置: ``` %%configure -f { "numExecutors": 3, "conf":{ "spark.rapids.memory.gpu.reserve": "10g" } } ``` 注意 使用 Horovod 进行训练时,用户应将 `numExecutors` 的 Spark 配置设置为小于或等于节点数。 ## 导入依赖项 在本教程中,我们使用 PySpark 读取和处理数据集。 然后使用 PyTorch 和 Horovod 构建分布式神经网络 (DNN) 模型并运行训练过程。 若要开始操作,需要导入以下依赖项: ``` # base libs import sys import uuid # numpy import numpy as np # pyspark related import pyspark import pyspark.sql.types as T from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.sql import SparkSession from pyspark.sql.functions import udf # pytorch related import torch.nn as nn import torch.nn.functional as F import torch.optim as optim # horovod related import horovod.spark.torch as hvd from horovod.spark.common.backend import SparkBackend from horovod.spark.common.store import Store # azure related from azure.synapse.ml.horovodutils import AdlsStore ``` ## 连接到备用存储帐户 需要使用 Azure Data Lake Storage (ADLS) 帐户来存储中间数据和模型数据。 如果使用备用存储帐户,请确保设置 [链接服务](https://learn.microsoft.com/zh-cn/azure/data-factory/concepts-linked-services) 以自动对帐户进行身份验证和读取。 此外,还需要修改以下属性:`remote_url`、`account_name` 和 `linked_service_name`。 ``` num_proc = 3 # equal to numExecutors batch_size = 128 epochs = 3 lr_single_node = 0.01 # learning rate for single node code uuid_str = str(uuid.uuid4()) # with uuid, each run will use a new directory work_dir = '/tmp/' + uuid_str # create adls store for model training, use your own adls account info remote_url = "<<ABFS path to storage account>>" account_name = "<<name of storage account>>" linked_service_name = "<<name of linked service>>" sas_token = TokenLibrary.getConnectionString(linked_service_name) adls_store_path = remote_url + work_dir store = AdlsStore.create(adls_store_path, storage_options={ 'account_name': account_name, 'sas_token': sas_token }, save_runs=True) print(adls_store_path) ``` ## 准备数据集 接下来,我们将准备用于训练的数据集。 在本教程中,我们将使用 [Azure 开放数据集](https://learn.microsoft.com/zh-cn/azure/open-datasets/dataset-mnist?tabs=azureml-opendatasets)中的 MNIST 数据集。 ``` # Initialize SparkSession spark = SparkSession.builder.getOrCreate() # Download MNIST dataset from Azure Open Datasets from azureml.opendatasets import MNIST mnist = MNIST.get_tabular_dataset() mnist_df = mnist.to_pandas_dataframe() mnist_df.info() # Preprocess dataset mnist_df['features'] = mnist_df.iloc[:, :784].values.tolist() mnist_df.drop(mnist_df.iloc[:, :784], inplace=True, axis=1) mnist_df.head() ``` ## 使用 Apache Spark 处理数据 现在,我们将创建 Apache Spark 数据帧。 此数据框将与 `HorovodEstimator` 一起用于训练。 ``` # Create Spark DataFrame for training df = spark.createDataFrame(mnist_df) # repartition DataFrame for training train_df = df.repartition(num_proc) # Train/test split train_df, test_df = train_df.randomSplit([0.9, 0.1]) # show the dataset train_df.show() train_df.count() ``` ## 定义 DNN 模型 完成数据集处理后,现在可以定义 PyTorch 模型。 同一代码还可用于训练单节点 PyTorch 模型。 ``` # Define the PyTorch model without any Horovod-specific parameters class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 10, kernel_size=5) self.conv2 = nn.Conv2d(10, 20, kernel_size=5) self.conv2_drop = nn.Dropout2d() self.fc1 = nn.Linear(320, 50) self.fc2 = nn.Linear(50, 10) def forward(self, x): x = x.float() x = F.relu(F.max_pool2d(self.conv1(x), 2)) x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) x = x.view(-1, 320) x = F.relu(self.fc1(x)) x = F.dropout(x, training=self.training) x = self.fc2(x) return F.log_softmax(x) model = Net() optimizer = optim.SGD(model.parameters(), lr=lr_single_node * num_proc, momentum=0.5) # notice the lr is scaled up loss = nn.NLLLoss() ``` ## 定型模型 现在,我们可以在 Apache Spark 数据帧的基础上训练 Horovod Spark 估算器。 ``` # Train a Horovod Spark Estimator on the DataFrame backend = SparkBackend(num_proc=num_proc, stdout=sys.stdout, stderr=sys.stderr, prefix_output_with_timestamp=True) torch_estimator = hvd.TorchEstimator( backend=backend, store=store, partitions_per_process=1, # important for GPU training model=model, optimizer=optimizer, loss=lambda input, target: loss(input, target.long()), input_shapes=[[-1, 1, 28, 28]], feature_cols=['features'], label_cols=['label'], batch_size=batch_size, epochs=epochs, validation=0.1, verbose=2) torch_model = torch_estimator.fit(train_df).setOutputCols(['label_prob']) ``` ## 评估已训练的模型 训练过程完成后,可以在测试数据集上评估模型。 ``` # Evaluate the model on the held-out test DataFrame pred_df = torch_model.transform(test_df) argmax = udf(lambda v: float(np.argmax(v)), returnType=T.DoubleType()) pred_df = pred_df.withColumn('label_pred', argmax(pred_df.label_prob)) evaluator = MulticlassClassificationEvaluator(predictionCol='label_pred', labelCol='label', metricName='accuracy') print('Test accuracy:', evaluator.evaluate(pred_df)) ``` ## 清理资源 为了确保关闭 Spark 实例,请结束任何已连接的会话(笔记本)。 达到 Apache Spark 池中指定的**空闲时间**时,池将会关闭。 也可以从笔记本右上角的状态栏中选择“停止会话”。 ![显示状态栏上的“停止会话”按钮的屏幕截图。](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/media/tutorial-build-applications-use-mmlspark/stop-session.png) ## 后续步骤 - [查看 Synapse 示例笔记本](https://github.com/Azure-Samples/Synapse/tree/main/MachineLearning) - [详细了解支持 GPU 的 Apache Spark 池](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/spark/apache-spark-gpu-concept) *** ## 反馈 此页面是否有帮助? 是 否 *** ## 其他资源 ### 本文内容 此页面是否有帮助? 是 否 [zh-cn](https://learn.microsoft.com/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch) [你的隐私选择](https://aka.ms/yourcaliforniaprivacychoices) 主题 - 亮 - 暗 - 高对比度 - [AI Disclaimer](https://learn.microsoft.com/zh-cn/principles-for-ai-generated-content) - [早期版本](https://learn.microsoft.com/zh-cn/previous-versions/) - [博客](https://techcommunity.microsoft.com/t5/microsoft-learn-blog/bg-p/MicrosoftLearnBlog) - [参与](https://learn.microsoft.com/zh-cn/contribute) - [隐私](https://go.microsoft.com/fwlink/?LinkId=521839) - [使用条款](https://learn.microsoft.com/zh-cn/legal/termsofuse) - [商标](https://www.microsoft.com/legal/intellectualproperty/Trademarks/) - © Microsoft 2025
Readable Markdownnull
ML Classification
ML Categoriesnull
ML Page Typesnull
ML Intent Typesnull
Content Metadata
Languagezh-cn
Authornull
Publish Timenot set
Original Publish Time2025-09-12 19:47:49 (7 months ago)
RepublishedNo
Word Count (Total)762
Word Count (Content)598
Links
External Links6
Internal Links20
Technical SEO
Meta NofollowNo
Meta NoarchiveNo
JS RenderedNo
Redirect Targetnull
Performance
Download Time (ms)601
TTFB (ms)465
Download Size (bytes)47,707
Shard168 (laksa)
Root Hash14615152987638977768
Unparsed URLcom,microsoft!learn,/zh-cn/azure/synapse-analytics/machine-learning/tutorial-horovod-pytorch s443