determined ai及本地调试环境配置

determined配置

1. docker配置(默认使用ubuntu操作系统)

  1. 安装docker(国内可能需要先换源)
sudo apt install docker.io

###
# 在docker容器中再安装docker容易出问题,操作前参考下述说明明确需求再实施(一般只需让容器能运行docker指令,此时只需要执行说明中的最后一节方案)
# https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
####
  1. 安装nvidia-container-toolkit
    用于Docker容器内调用GPU(注意可能需要科学上网)
curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

sudo apt-get install -y --no-install-recommends nvidia-container-toolkit

# 可能需要手动安装systemctl指令:
# sudo apt install systemd

sudo systemctl restart docker
  1. 特定用户无法执行docker指令时的处理方案
    1. 将用户添加到特定组中:sudo usermod -aG docker inf
    2. 确认特定用户是否已被添加到指定组中:sudo cat /etc/group | grep docker
    3. 已将用户添加到指定组中,但执行id指令并未看到指定组时,可以尝试重新登录用户
  2. docker远程访问安全配置
  3. docker常用指令
  4. Docker容器磁盘空间限制
  5. 启动container时设置内存空间和硬盘映射
  6. ssh远程访问docker容器注意:root用户远程登录须额外运行以下指令再重启ssh服务:
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
ssh-keygen -A
# 设置root密码
passwd
# 重启ssh服务
service ssh restart
  1. docker容器的进入
    1. 从image建立可使用gpu的container并进入交互式界面:docker run -it -p [host_port]:[container_port](do not use 8888) --gpus all -v [host_path]:[container_path] --name [container_name] [image_name] /bin/bash
    -v指定路径映射,将本地路径挂载到容器中
    2. 开启已有容器:
    docker start [container_id or container_name]
    3. 进入已经启动的 docker 容器的交互式终端,可以使用 docker exec 命令。这个命令可用于在运行中的容器内部执行命令或脚本,并以交互模式与容器进行交互,具体格式如下:
    docker exec -it [container_id or container_name] /bin/bash
    -it 表示 docker 将以交互模式和伪终端(pseudo-TTY)模式运行命令。
    /bin/bash 则是要执行的命令或脚本,这里表示将会启动一个交互式Bash shell,
    [container_id or container_name] 为要进入的实际容器的 ID 或名称,如果不确定确切的容器 ID 或名称,可以使用 docker ps 命令打印当前已开启的容器列表,包括它们的 ID、名称、状态等信息。如果要查看当前所有的容器列表,可使用docker ps -a
  2. windows安装docker:
    1. 官网下载安装:https://www.docker.com/,安装后首次运行时会提示安装虚拟机服务,推荐选择wsl
    2. wsl配置(docker首次启动时会弹窗提示配置方式,可以选择推荐的默认配置(需要科学上网),也可以按下述步骤手动配置):
      1. docker须配置: wsl --update,默认从microsoft store下载,可以尝试增加--web-download参数从github下载(需要科学上网),成功后先执行wsl --set-default-version 2将默认版本切换为2,再运行wsl --shutdown关闭wsl,再启动docker desktop(会自动启动wsl,确保更新生效)
      2. 自定义配置linux子系统
    3. docker存储和加载image的默认路径配置:在这里插入图片描述
    4. 自定义python开发环境配置流程(windows配置,仅可用于调试,不能直接导出image到linux系统上运行determined实验,会出现显卡驱动不可用问题,解决方案参考该教程(补充:无GPU运行image建立容器,需要删除所有会引起带GPU运行异常的文件,教程中的三类可能不全,目前已知可行的指令集:
      rm /usr/lib/x86_64-linux-gnu/libcudadebugger*
      rm /usr/lib/x86_64-linux-gnu/libnvidia-*
      rm /usr/lib/x86_64-linux-gnu/libcuda.so*
      rm /usr/lib/x86_64-linux-gnu/libnvcuvid.so.*)):
docker run -it --gpus=all -p 8022:22 --name test -v D:\learn\doctor_thesis:/home/WangXiaoFeng/doctor_thesis/ determinedai/environments:cuda-11.3-pytorch-1.12-tf-2.11-gpu-0.27.1 /bin/bash

# 此时已进入新建立的test容器,运行以下指令设置允许以root身份进行ssh登录
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
ssh-keygen -A 
passwd 
# 设置自己的root密码

# 重启服务使修改生效
service ssh restart

# 将常用的国内pip源和conda源改入新容器的家目录下
# 安装determined
pip install determined==0.27.1

# 此后启动test容器即可在pycharm等python编辑器中配置ssh解释器到该环境,
# 默认地址为localhost:8022,用户名root,密码为新设置的passwd

2. determined配置(详细说明)

  1. 安装determined
pip install determined
  1. 启动master节点,默认端口是8080
det deploy local master-up
# 关闭master节点
# det deploy local master-down
  1. agent配置:新建文件agent-config.yaml,输入以下内容并按需调整
## The hostname or IP address of the Determined master.
master_host: ip_of_your_master_node
## The port of the Determined master.
master_port: 8080

## The ID of this agent; defaults to the hostname of the current machine. Agent IDs must be unique## within a cluster.
agent_id: rtx3090_0
## The label of this agent. Agents with labels may only run workloads with the
## corresponding label.
label: rtx3090

## The GPUs that should be exposed as slots by the agent. A comma-separated list of GPUs,
## each specified by a 0-based index, UUID, PCI bus ID, or board serial number.
# http_proxy: ip_of_proxy
# https_proxy: ip_of_proxy

主要配置3个内容:

  • Master节点,用于识别Master节点
  • agent_id和label,分别对应本机id和组名,根据显卡型号命名即可
  • 科学上网代理
  1. agent节点启动:
det deploy local agent-up <master_ip> --agent-config-path <path to agent-config.yaml`>

##
# 也可以使用:
# docker run --gpus all -v /var/run/docker.sock:/var/run/docker.sock -v "$PWD"/agent-config.yaml:/etc/determined/agent.yaml determinedai/determined-agent:0.27.1
# 注意最后的版本号要和安装的determined版本号对应,一般为最新(运行det -v可以查看当前版本号)
# "$PWD"/agent-config.yaml`是上一步新建的配置文件路径,按需调整(PWD表示当前工作目录)
# 启动后可在web端看到当前cluster状态有变化,web端访问地址:masterIP:8080
##

# agent节点关闭
# det deploy local agent-down

3. 使用

  1. master节点启动后即可在web端对应地址看到当期系统状态,默认地址:masterip:8080,默认登录用户admin,默认无密码,直接登录即可
  2. 终端机安装determined,并配置master节点ip后,可以运行指令从命令行进行任务配置
    • master节点IP配置
      • 全局环境变量形式
# 开机自动增加环境变量
sudo nano /etc/profile
# 添加如下内容:
# export DET_MASTER=ip_of_your_master_node
sudo source /etc/profile
  1. determined用户登录
    admin用户可以管理用户添加删除,具体参考用户管理文档
det user login
# 输入账号密码即可
  1. 任务配置文件编写(详细配置
description: your_task_name
resources:
    agent_label: rtx3090
    slots: 1
  
# use same host_Path and container_path to avoid problems when downloading checkpoint
bind_mounts:  
    - host_path:   /home/test/project
      container_path:   /home/test/project
environment:  
    image: determinedai/environments:cuda-11.3-pytorch-1.12-tf-2.11-gpu-0.27.1
environment_variables:  
    - http_proxy=your_proxy  
    - https_proxy=your_proxy

以上涵盖了开启任务所需的基本设置,包括:

  • description: 任务名
  • resources: 要开启任务的GPU类型(对应label)和数量(对应slots)
  • bind_mounts: 挂载分布式存储到docker容器内,host_path为物理机路径,container_path为容器内路径
  • environment: docker容器的环境配置,包括使用的镜像和环境变量。
  1. 启动实验:
det experiment create const.yaml <代码所在文件夹路径>
# 代码所在路径中的全部文件将被上传到容器中启动训练,注意路径下的文件总大小不要超过95M,数据集最好使用bind mounts的方式挂载到容器内
  1. Docker image配置:determined官方常用image地址
    1. 自定义image配置流程(有细微调整,使新的image支持远程ssh登录):
      1. 拉取官方默认image
      2. 交互式进入默认image,依次进行以下操作
      docker run -it --gpus all -p 8022:22 --name test -v /home/WangXiaoFeng/doctor_thesis/:/home/WangXiaoFeng/doctor_thesis/ determinedai/environments:cuda-11.3-pytorch-1.12-tf-2.11-gpu-0.27.1 /bin/bash
      
      # 远程登录配置
      sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config	
      ssh-keygen -A
      # 设置root密码
      passwd
      # 重启ssh服务
      service ssh restart
      # 此时就可以通过宿主机ip地址:8022以root身份访问该容器,
      # 但容器重启后无法直接ssh登录,需要再运行一次service ssh restart
      # 修改家目录下的.bashrc文件可以实现容器启动后自动重启ssh服务
      echo "service ssh restart" >> .bashrc
      # 此时pycharm配置该ssh解释器时可能会出现iIndex 11 out of bounds for length 11问题,运行以下指令可以解决:
      sed -i 's/#   StrictHostKeyChecking ask/StrictHostKeyChecking ask/' /etc/ssh/sshd_config
      # 预期的python解释器位置一般在 /opt/conda/bin/python3
      
      # pip源修改
      # 升级 pip 到最新的版本 (>=10.0.0) 后进行配置:
      # python -m pip install --upgrade pip
      pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
      
      # 使用pip按需安装库
      
      # 此时直接导出image后默认的python3路径会发生变化,无法正常运行determined实验,具体原因不明,可行的解决方案如下)
      # python3默认路径修正:
      # 1. 删除掉默认的python文件
      rm /usr/bin/python3
      # 2. 建立软链接到预期的python文件
      ln -s /opt/conda/bin/python3 /usr/bin/python3
      # pip指令也会丢失,运行以下指令将pip的路径指明,后续再启动容器后就可以直接运行pip
      echo "alias pip=/opt/conda/bin/pip" >> .bashrc
      
      1. 导出本地container,再导入为image,后续determined实验配置即可使用该image:
      # docker ps -a					# 查看容器状态,确认容器名称或ID
      # 导出前最好先关闭容器
      docker stop test		
      
      # docker export (容器名称或ID) > (镜像存储文件名,一般为.tar格式) 	# windows不能使用这种写法!导出容器为image,存储在本地目录中
      docker export test > ./Downloads/test.tar
      # docker import - (导入后镜像名) < (镜像存储文件名,一般为.tar格式)	# windows不可用!导入镜像
      docker import - my_test_iqa:cuda-11.3-pytorch-1.12-tf-2.11-gpu-0.27.1-pyiqa-0.1.10 < ./Downloads/test.tar
      # image名字重复时会导致老的image变为<none>:<none>,运行以下指令可以删除这些无用image
      docker rmi $(docker images -f "dangling=true" -q)
      
      # docker container export (容器名称或ID) -o (镜像存储文件名,一般为.tar格式)		# windows可用的导出方法!
      # docker image import (镜像存储文件名,一般为.tar格式) (导入后镜像名)				# windows可用的导入方法!	
      
      docker image ls													# 查看所有镜像
      docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]				# image重命名
      
  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值