本文介绍Lindorm计算引擎GPU作业开发的详细步骤。
前提条件
已开通Lindorm计算引擎。具体操作,请参见开通与变配。
GPU作业开发流程
步骤一:开发并上传作业
编写基于CUDA访问GPU的示例程序。
import torch
import numpy as np
from pyspark.sql import SparkSession
def check_executor_gpu_env(records):
#将数据转化为torch类型
data = torch.from_numpy(np.array(records))
try:
if torch.cuda.is_available():
device = torch.device("cuda")
else:
raise Exception('CUDA is not available in executor')
#将数据写入GPU
on_gpu = data.to(device)
print("gpu device -- {}, sum of data -- {}".format(on_gpu.device, torch.sum(on_gpu)))
except Exception as e:
print(e)
if __name__ == "__main__":
if torch.cuda.is_available():
print('CUDA is available in driver')
else:
print('CUDA is not available in driver')
spark = SparkSession.builder.appName("TEST_GPU_ENV").getOrCreate()
rdd = spark.sparkContext.parallelize(range(100), 1)
rdd.foreachPartition(check_executor_gpu_env)
spark.stop()
将示例程序上传至HDFS。具体操作,请参见通过控制台上传文件。
步骤二:打包并上传CUDA运行环境
打包项目依赖的Python环境和第三方类库。推荐使用Conda或Virtualenv将依赖类库打包为tar
包,此处以Conda为例。
在Linux环境中创建3.7~3.10版本的Python环境,本文以3.10.10版本为例。
conda create --name gpu_env python=3.10.10
conda activate gpu_env
安装GPU相关的依赖包。
conda install pytorch=1.11.0 cudatoolkit=11.3 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
conda install cudnn
conda install numpy
打包Conda环境,并命名为
gpu_env.tar.gz
。
conda install conda-pack=0.7.0 -c conda-forge
conda-pack -f -o gpu_env.tar.gz
将
gpu_env.tar.gz
上传至HDFS 。具体操作,请参见通过控制台上传文件。
如果您想通过Virtualenv打包项目依赖,请参见Python Package Management。
步骤三:提交GPU作业
Lindorm计算引擎支持以下两种方式提交并管理作业。
提交作业时,请配置与GPU相关的Spark参数:
参数 | 是否必填 | 说明 | 示例值 |
spark.kubernetes.{driver/executor}.annotation.k8s.aliyun.com/eci-use-specs | 是 | 指定GPU的规格与型号。规格列表的详细信息,请参见GPU实例规格。 | ecs.gn7i-c8g1.2xlarge |
spark.{driver/executor}.resource.gpu.vendor | 是 | 指定GPU的生产厂商。 说明 该参数需要与指定的GPU规格与型号对应。 | nvidia.com |
spark.{driver/executor}.resource.gpu.amount | 是 | GPU个数。 说明 GPU个数固定为1。 | 1 |
spark.{driver/executor}.resource.gpu.discoveryScript | 是 | 脚本文件所在的路径。 说明 在启动Spark driver/executor时会使用该脚本查询并绑定GPU资源,且脚本文件所在的路径固定为 | /opt/spark/examples/src/main/scripts/getGpusResources.sh |
- 本页导读 (1)