相关文章推荐
奔跑的草稿纸  ·  罗小卜小说_最新罗小卜小说推荐-QQ阅读·  11 月前    · 
淡定的充电器  ·  《计算机病毒分析与防范大全(第2版)》【价格 ...·  1 年前    · 
讲道义的茶叶  ·  亿田集成灶怎么样_什么值得买·  1 年前    · 
有胆有识的投影仪  ·  再看小米生态链:小米IPO破发 ...·  2 年前    · 
力能扛鼎的伤疤  ·  2021年7月15日外交部发言人赵立坚主持例 ...·  2 年前    · 
Code  ›  从零开始制作PyTorch的Singularity容器镜像开发者社区
镜像 容器技术 容器 singularity
https://cloud.tencent.com/developer/article/1836744
爱笑的脸盆
2 年前
作者头像
DechinPhy
0 篇文章

从零开始制作PyTorch的Singularity容器镜像

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Dechin的专栏 > 从零开始制作PyTorch的Singularity容器镜像

从零开始制作PyTorch的Singularity容器镜像

作者头像
DechinPhy
发布 于 2021-06-17 20:32:53
1.2K 0
发布 于 2021-06-17 20:32:53
举报

技术背景

在前面的博客中,我们大篇幅的使用到了Docker和Singularity这两种常见的 容器 化编程环境解决方案,使得我们的各个编程环境能够更好的隔离。如果要展开讲解容器化编程环境的重要性的话,我们有可能会发现容器并不是那么的必须:比如解决python库的依赖冲突问题,我们可以选择使用python的virtualenv或者conda的虚拟环境;比如解决gcc的版本依赖冲突,我们可以手动配置和选择对应的版本;比如对于我们没有root权限和对外网络的环境,想要安装一些工具可以采用源码编译安装。那么,这些种种的问题,如果我们采用Singularity的方案,就可以一次性的解决。而且容器化是一个趋势,比如各种的机器学习框架都会提供容器版本的安装方案,像MindSpore和Tensorflow等等。这里我们尝试使用Singularity的容器def文件(类似于Docker的Dockerfile,而且兼容Docker的镜像),去构造一个Pytorch专属的编程环境。

环境准备

这里我们假设本地的容器环境是已经安装完毕的,可以通过如下指令进行检验:

dechin@ubuntu2004:~/projects/pytorch$ singularity --version
singularity version 3.8.0-rc.1

建议至少使用3.5以上版本的Singularity,否则会有编译不兼容的问题。关于Singularity的安装与基本使用,可以参考这篇 在Manjaro Linux上安装Singularity的方法 、以及 在CentOS上安装Singularity的方法 ,还有这篇 用Singularity来配置MindSpore环境的博客 。

制作def文件

Singularity的def文件类似于Docker的Dockerfile,用于定义一个 容器镜像 ,而在这个文件中我们除了指定基础镜像之外,还可以指定下载基础镜像之后要执行的配置项目。我们先看一个简单例子:

dechin@ubuntu2004:~/projects/pytorch$ cat pytorch.def 
Bootstrap: docker
From: ubuntu
%post
    cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
    sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    apt-get -y update
    apt -y install python
    apt -y install python3-pip
    pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

这个例子就实现了pytorch整个的容器化安装流程,但是这里不建议大家直接使用我写的这个def文件来制作镜像,这里面最后一步安装pytorch的指令,需要适配自己本地的环境进行调整。下面解释一下这些指令的含义:

  • Bootstrap 用于指定下载的仓库类型,建议是选取docker,因为这里面的镜像是最多的。
  • From 用于指定一个基础镜像的版本,因为ubuntu是一个使用比较广泛的发行版,因此我们指定ubuntu的时候,脚本会自动从dockerhub上面寻找最新版本的ubuntu镜像进行下载。当然我们也可以指定一个特殊的版本,比如可以指定为 ubuntu:16.04 。
  • %post 是在容器镜像中执行的系统指令,这些指令执行完成后生成的文件等会被打包保存到我们的镜像sif文件中。类似的指令还有 %environment ,可用于配置export环境变量,还有 %runscript 可用于执行一些脚本命令。
  • 从 cp 到 apt-get update 这4个步骤,是在容器内更新系统镜像源,我们采用的是华为的镜像,一般国内的镜像源在使用apt下载东西的时候会有比较明显的加速效果,当然这个镜像源仓库还有很多其他的源,比如pip源等等。
  • 在这个镜像文件中我们可以直接使用 apt 来安装python和pip,但是注意安装的时候要加上 -y 的选项,这个选项可以帮助我们默认跳过需要手动确认的项目,我们知道在apt安装的过程经常会暂停下来,要求输入一个 y 之后才能继续往下安装,但是这个在使用镜像的时候是没办法支持手动的输入的。
  • 最后我们按照参考链接1中给出的安装指令进行安装,注意要匹配好自己的环境,本文采用的配置项目如下截图所示:

构建sif文件

在完成上述步骤的镜像配置文件后,可以用如下的指令进行镜像的构建:

sudo singularity build pytorch.sif pytorch.def

在执行的过程中会有大量的信息弹出,我们只关注下开头和结尾即可:

INFO:    Starting build...
Getting image source signatures
Copying blob 345e3491a907 skipped: already exists  
Copying blob 57671312ef6f skipped: already exists  
Copying blob 5e9250ddb7d0 [--------------------------------------] 0.0b / 0.0b
Copying config 7c6bc52068 done  
Writing manifest to image destination
Storing signatures
2021/06/15 09:44:57  info unpack layer: sha256:345e3491a907bb7c6f1bdddcf4a94284b8b6ddd77eb7d93f09432b17b20f2bbe
2021/06/15 09:44:58  info unpack layer: sha256:57671312ef6fdbecf340e5fed0fb0863350cd806c92b1fdd7978adbd02afc5c3
2021/06/15 09:44:58  info unpack layer: sha256:5e9250ddb7d0fa6d13302c7c3e6a0aa40390e42424caed1e5289077ee4054709
INFO:    Running post scriptlet
+ cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
Successfully installed numpy-1.20.3 pillow-8.2.0 torch-1.8.1+cu111 torchaudio-0.8.1 torchvision-0.9.1+cu111 typing-extensions-3.10.0.0
INFO:    Creating SIF file...
INFO:    Build complete: pytorch.sif

一般如果有报错的话中途就会停下来,如果看到上面的这个指令,基本就构建成功了,并且可以在当前目录下看到一个新生成的sif文件:

dechin@ubuntu2004:~/projects/pytorch$ ll
总用量 4086900
drwxrwxr-x 2 dechin dechin       4096 6月  15 09:53 ./
drwxrwxr-x 8 dechin dechin       4096 6月  15 09:34 ../
-rw-rw-r-- 1 dechin dechin        498 6月  15 09:44 pytorch.def
-rwxr-xr-x 1 dechin dechin 4184969216 6月  15 09:53 pytorch.sif*

这个就是我们构建好的pytorch的镜像了。

PyTorch镜像测试

首先我们看一下镜像中python的版本:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec pytorch.sif python3 --version
Python 3.8.5

因为pytorch对python的版本没有比较特殊的要求,所以这里3.7或3.8或3.9都是可以的。接下来执行一个pytorch官方给出的测试示例,生成一个随机数矩阵:

dechin@ubuntu2004:~/projects/pytorch$ singularity exec pytorch.sif python3 -c "import torch;x = torch.rand(5, 3);print(x)"
tensor([[0.2045, 0.2268, 0.2132],
        [0.4473, 0.3536, 0.8075],
        [0.0951, 0.0261, 0.5950],
 
推荐文章
奔跑的草稿纸  ·  罗小卜小说_最新罗小卜小说推荐-QQ阅读
11 月前
淡定的充电器  ·  《计算机病毒分析与防范大全(第2版)》【价格 目录 书评 正版】_中图网(原中国图书网)
1 年前
讲道义的茶叶  ·  亿田集成灶怎么样_什么值得买
1 年前
有胆有识的投影仪  ·  再看小米生态链:小米IPO破发 雷军为何觉得是好事?|小米_新浪财经_新浪网
2 年前
力能扛鼎的伤疤  ·  2021年7月15日外交部发言人赵立坚主持例行记者会
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号