# cloud-train **Repository Path**: gasu-dan/cloud-train ## Basic Information - **Project Name**: cloud-train - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-18 - **Last Updated**: 2023-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [实验] 动手实现云计算 --- ### 一:实验介绍 不少同学进入研究生阶段,开始接触深度学习,但是苦于本地硬件性能太低,于是大手一挥购买到了云GPU服务器用来训练模型。今天就教给大家一个简单、快捷、科学、工程化、分布式的云端代码部署方法。 云训练是指将模型训练过程放在云端进行,以减少本地硬件的依赖,提高模型训练的效率。 插一句:在软件领域,无非就是思想、代码、框架、工程化,今天讲的就是工程化。 ### 二:实验内容 本实验将使用Docker,将代码打包成软件镜像,部署在云服务器中,使用云服务器中的GPU资源进行模型训练。 ### 三:实验准备 #### 1. 硬件 | 序号 | 实验设备 | | :-: | --------------- | | 1 | 具有公网IP的云服务器 | | 2 | 本地计算机 | | 3 | MacOS 或者 [WSL](https://learn.microsoft.com/zh-cn/windows/wsl/install) | #### 2. 软件 | 序号 | 实验设备 | | :---: | --------------------- | | 1 | python 代码 | | 2 | 版本依赖文件 | | 3 | [docker 24.0.6](https://docs.docker.com/desktop/install/linux-install/) | | 4 | [Ubuntu 20.04 LTS](https://cn.ubuntu.com/download) | | 5 | [Miniconda3](https://docs.conda.io/projects/miniconda/en/latest/) | #### 3. 知识准备 | 序号 | 实验设备 | | :---: | ----------- | | 1 | Linux基础 | | 2 | shell基础 | | 3 | Docker基础 | | 4 | python基础 | | 5 | conda基础 | ### 四:实验步骤 #### 1. 梳理思路 首先让我梳理一下,如果部署一个训练模型的代码需要让服务器安装什么软件? ``` (1) 首先需要装指定的python环境 (2) 其次要安装CUDA (3) 然后要安装pytorch或者TensorFlow (4) 最后把代码跑起来 ``` 注意:我们尽量采用一个虚拟化的方式,让我们的代码可以在任何地方运行,并且改代码的所依赖的库的版本不能污染服务器,所以我们不能直接在服务器上安装依赖库,否则这个代码需要python3.7,另一个代码需要3.11,这会使运维变得困难。所以我们需要讲代码以及依赖库打包成一个镜像,这个这个代码就可以在任何一台计算机上运行。 #### 2. 导出版本环境 ##### 2.1 pip导出所需要的库 - 查看python代码环境 ```shell python --version ``` - 查看本项目中python代码所依赖的库 ```shell python -m pip freeze ``` - 将库版本信息写入到requirements.txt文件 ```shell python -m pip freeze > requirements.txt ``` - 从requirements.txt文件读取依赖库并执行安装 ```shell python -m pip install -r requirements.txt ``` ##### 2.2 conda导出所需要的环境配置清单 - 导出环境及依赖库 ```shell conda env export > environment.yaml ``` - 导入环境及依赖库 ```shell conda env create -f environment.yaml ``` ##### 2.3 conda导出环境和模块到文件 - 导出环境及依赖库 ```shell conda pack -n torch-gpu -o torch-gpu.tar.gz ``` - 导入环境及依赖库 ```shell conda pack -n torch-gpu -o torch-gpu.tar.gz ``` ##### 3. 创建Dockerfile > *本教程基于英伟达官方CUDA镜像* 确定好代码环境依赖后,我们就可以将指定的python环境,指定的版本模块,打包到一个linux镜像中,最后通过虚拟机的形式做隔离环境,放到服务器上启动它 - 首先,让我们拉取CUDA的镜像 ```shell # 拉取英伟达官方CUDA镜像 # 注意这里需要服务器提前安装英伟达显卡驱动 docker pull nvidia/cuda:12.2.0-base-ubuntu22.04 ``` 英伟达官方CUDA镜像链接:[https://hub.docker.com/r/nvidia/cuda/](https://hub.docker.com/r/nvidia/cuda/) - 编写Dockerfile ```Dockerfile # 使用英伟达官方CUDA镜像 FROM nvidia/cuda:12.2.0-base-ubuntu22.04 # 工作目录设置为/app WORKDIR /app # 设置镜像时区为中国时区 COPY ./resource/Shanghai /etc/localtime # 安装Miniconda COPY ./resource/Miniconda3.sh . RUN chmod +x Miniconda3.sh RUN ./Miniconda3.sh -b -p /root/miniconda3/ ENV PATH="/root/miniconda3/condabin:${PATH}" RUN rm -f ./Miniconda3.sh # mini配置清华源 COPY ./resource/.condarc /root/.condarc RUN conda clean -i # 安装依赖 COPY ./resource/environment.yaml . RUN conda env create -f environment.yaml # 复制代码所需文件到容器中 COPY ./code/train.py . COPY ./code/data/MNIST/raw/*.gz ./data/MNIST/raw/ CMD ["/root/miniconda3/envs/torch-gpu/bin/python", "-u", "train.py"] ``` #### 3. 打包镜像 - 使用docker build打包 ```shell docker build -t train:v1.0 . ``` - 打包好跑一下试试 ```shell docker run train:v1.0 ``` #### 4. 拷贝镜像到服务器 > *本教程基于文件,存在私有hub拉取镜像更好的方式* - 镜像导出到文件 ```shell docker save train:v1.0 > train.v1.0.tar ``` - 将该文件拷贝到远程服务器中(或者用U盘拷贝到指定服务器) ```shell scp train.v1.0.tar root@101.34.244.93:/root/cloud-train ``` - 切换到服务器shell,加载镜像到Docker ```shell docker load -i train.v1.0.tar ``` - 最后一步:镜像跑起来 ```shell docker run -d train:v1.0 ```