GPU算力池管理工具Determined AI部署与使用教程(2024.03)

news2024/11/13 12:30:50

1. 概念

1.1 什么是Determined?

Determined AI 是一个全功能的深度学习平台,兼容 PyTorch 和 TensorFlow。它主要负责以下几个方面:

  • 分布式训练:Determined AI 可以将训练工作负载分布在多个 GPU(可能在多台计算机上)上,而无需更改代码。无论是在一台计算机上利用2个 GPU 还是在多台计算机上利用16个 GPU,都只需更改配置即可。
  • 超参数调优:Determined AI 提供了自动超参数搜索功能,可以帮助你找到最优的模型参数。
  • 资源管理:Determined AI 可以有效地管理和调度计算资源,以降低云 GPU 的成本。
  • 实验跟踪:Determined AI 可以跟踪和记录实验的过程,方便你分析结果和复现实验。

Determined AI 的主要组件之一是命令行接口(CLI),它提供了一种高效的方式来管理和控制系统的各个方面。例如,你可以使用 CLI 来创建、列出和管理实验,以及访问重要的实验指标和日志。CLI 还可以帮助你管理作业队列,监控正在进行的任务的进度,甚至根据需要优先处理或取消作业。

此外,Determined AI 还支持自由形式的任务,如命令和 Shell。命令和 Shell 使开发人员可以在不必编写符合试验 API 的代码的情况下,使用 Determined 集群和其 GPU。

1.2 Determined集群中的Master和Agent分别表示什么意思?

在 Determined 集群中,Master 和 Agent 有特定的角色和功能。

  • Master:Master 是 Determined 集群的核心,它负责管理和调度所有的任务。Master 接收来自用户(通过网页、CLI 等方式)的请求,并将这些请求发送到 Agent 进行处理。Master 的行为可以通过设置配置变量来控制,这可以通过使用配置文件、环境变量或命令行选项来完成。
  • Agent:Agent 是执行任务的节点,它们在 Master 的调度下运行任务。每个 Agent 都有一个唯一的 ID(默认为当前机器的主机名),并且在一个集群中必须是唯一的。Agent 节点通常是配备 GPU 的服务器,用于运行计算密集型的深度学习任务。

总的来说,Master 负责管理和调度任务,而 Agent 负责执行这些任务。

2. 部署与配置

2.1 在本地部署

在部署 Master 与 Agent 节点的服务器上需要先安装好 Docker,安装教程(Ubuntu 系统下):Install Docker Engine on Ubuntu。

安装 nvidia-container-toolkit(Master 和存储节点不需要 GPU,也无需安装 Nvidia 相关的内容),否则部署使用 GPU 的集群会出现报错 Internal Server Error ("could not select device driver "nvidia" with capabilities: [[gpu utility]]")

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

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

sudo service docker restart

安装 Determined 库并在本地启动集群,对于本地开发或小型集群(例如 GPU 工作站),您可能希望同时安装 Master 和 Agent 位于同一节点上,因此可以使用 cluster-up

pip install determined  # 可能会有某些包之间存在版本冲突需要解决

# If your machine has GPUs:
det deploy local cluster-up

# If your machine does not have GPUs:
det deploy local cluster-up --no-gpu

如果 det 命令识别不到可能是没有配置环境变量:

sudo vim /etc/environment
在 PATH='xxx' 后面添加 ':/home/<用户名>/.local/bin'
即: 'xxx:/home/<用户名>/.local/bin'

source /etc/environment  # 应用更新

要停止 Determined 集群,请在当前运行 Determined 集群的计算机上,运行:

det deploy local cluster-down

在许多情况下,Determined 集群将由多个节点组成。在这种情况下,您将需要分别启动 Master 和 Agents。启动和停止独立 Master:

det deploy local master-up  # 启动
det deploy local master-down  # 停止

若要在计算机上部署独立的 Agent,请运行以下命令之一,<master_hostname> 为 Master 的主机名:

# If the machine has GPUs:
det deploy local agent-up <master_hostname>

# If the machine doesn't have GPUs:
det deploy local agent-up --no-gpu <master_hostname>

# Stop Agent
det deploy local agent-down

与用户相关的指令:

det user list  # 列出所有的用户,包括他们的用户名、管理员状态、活动状态等
det user get <username>  # 显示某用户的详细信息,包括他们是否已经登录

访问 http://localhost:8080/,用户名为 determined,密码留空,即可登录。

2.2 配置参考

查看当前 Master 配置信息:

det master config

我们可以自定义 Master 的配置,在需要部署 Master 的服务器上创建 Master 配置文件 master-config.yaml,具体配置教程见:Master Configuration Reference,参考内容如下:

__internal:
  audit_logging_enabled: false
  external_sessions:
    jwt_key: ''
    login_uri: ''
    logout_uri: ''
  proxied_servers: null
cache:
  cache_dir: /var/cache/determined
checkpoint_storage:
  host_path: /home/ubuntu/.local/share/determined
  propagation: null
  save_experiment_best: 0
  save_trial_best: 1
  save_trial_latest: 1
  storage_path: null
  type: shared_fs
cluster_name: ''
config_file: ''
db:
  host: determined-db
  migrations: file:///usr/share/determined/master/static/migrations
  name: determined
  password: '********'
  port: '5432'
  ssl_mode: disable
  ssl_root_cert: ''
  user: postgres
enable_cors: false
feature_switches: []
integrations:
  pachyderm:
    address: ''
launch_error: true
log:
  color: true
  level: info
logging:
  type: default
notebook_timeout: null
observability:
  enable_prometheus: false
port: 8080
reserved_ports: null
resource_manager:
  client_ca: ''
  default_aux_resource_pool: default  # 默认辅助资源池
  default_compute_resource_pool: defaut  # 默认计算资源池
  no_default_resource_pools: false
  require_authentication: false
  scheduler:
    allow_heterogeneous_fits: false
    fitting_policy: best
    type: fair_share
  type: agent
resource_pools:  # 设置资源池
- agent_reattach_enabled: false
  agent_reconnect_wait: 25s
  description: ''
  kubernetes_namespace: ''
  max_aux_containers_per_agent: 100
  pool_name: default
  provider: null
  task_container_defaults: null
- agent_reattach_enabled: false
  agent_reconnect_wait: 25s
  description: ''
  kubernetes_namespace: ''
  max_aux_containers_per_agent: 100
  pool_name: RTX3090
  provider: null
  task_container_defaults: null
root: /usr/share/determined/master
security:
  authz:
    _strict_ntsc_enabled: false
    fallback: basic
    rbac_ui_enabled: null
    strict_job_queue_control: false
    type: basic
    workspace_creator_assign_role:
      enabled: true
      role_id: 2
  default_task:
    gid: 0
    group: root
    id: 0
    uid: 0
    user: root
    user_id: 0
  ssh:
    rsa_key_size: 1024
  tls:
    cert: ''
    key: ''
task_container_defaults:
  add_capabilities: null
  bind_mounts: null
  cpu_pod_spec: null
  devices: null
  drop_capabilities: null
  gpu_pod_spec: null
  kubernetes: null
  log_policies: null
  network_mode: bridge
  pbs: {}
  shm_size_bytes: 4294967296
  slurm: {}
  work_dir: null
telemetry:
  cluster_id: ''
  enabled: true
  otel_enabled: false
  otel_endpoint: localhost:4317
  segment_master_key: '********'
  segment_webui_key: '********'
tensorboard_timeout: 300
webhooks:
  base_url: ''
  signing_key: fc9942f4d575

然后即可使用配置文件启动集群:

det deploy local cluster-up --master-config-path ./master-config.yaml

在需要部署 Agent 的服务器上创建 Agent 配置文件 agent-config.yaml,具体配置教程见:Agent Configuration Reference,参考内容如下:

# 必填,用于确定 Master 节点的主机名或 IP 地址
master_host: <ip_of_your_master_node>
# Master 节点的端口。
master_port: 8080

# 此 Agent 的 ID,默认为当前计算机的主机名,ID 在集群中必须是唯一的
agent_id: RTX3090_0
# 指定分配到哪个资源池
resource_pool: RTX3090

# Agent 容器的 HTTP/HTTPS 代理地址
http_proxy: <ip_of_proxy>
https_proxy: <ip_of_proxy>

这里主要配置3个内容:

  • Master 节点主机名和端口号,用于识别 Master 节点。
  • agent_idresource_pool,分别对应本机 ID 和资源池,根据显卡型号命名即可,注意资源池需要已在 Master 配置文件中定义过。
  • 科学上网代理。

完成后,所有 Agent 节点使用如下命令启动(最后的 0.29.0 为 Determined AI 的版本号,根据自己安装的版本修改即可):

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.29.0

2.3 命令行、Notebook、Shell的使用方法

Determined 主要有两种使用方式:Web 和 CLI。其中 Web 可以直接通过 <Master节点IP>:8080 进行访问:

在这里插入图片描述

但是不推荐使用 Web 方式,因为网页端创建任务无法自定义存储路径和加载的 Docker 镜像,灵活度十分受限。因此接下来详细介绍 CLI 的用法。

首先在终端机安装好 Determined,然后在环境变量中配置 Master 节点 IP:

vim ~/.bashrc

# 添加以下内容,保存并退出
export DET_MASTER=<Master节点的IP>

source ~/.bashrc

接下来可以使用 Determined CLI 创建任务,首先在终端机需要登录,在 Admin 用户(用户名为 admin,密码留空)中可以管理其他用户,假设已经给终端机创建好账号即可登录:

det user login

然后写一个开启任务的 Yaml 配置文件,这里给出一个参考:

description: test_task
resources:
  resource_pool: RTX3090
  slots: 1
# 将物理机上host_path路径下的文件挂载到用户当前使用的容器的container_path路径下
bind_mounts:
  - host_path: /home/ubuntu/
    container_path: /run/determined/workdir/asanosaki/
environment:  # Docker容器的环境配置,包括使用的镜像和环境变量
  image: determinedai/environments:cuda-11.8-pytorch-2.0-gpu-0.29.1
  environment_variables:
  - http_proxy=<ip_of_proxy>
  - https_proxy=<ip_of_proxy>

Determined 官方给出了很多个版本的 CUDA 和框架的组合,可以自行选择所需要的镜像,Determined AI Docker 镜像列表:Docker Hub DeterminedAI。

完成后,可以选择开启 Jupyter Notebook 或者终端,这取决于使用者的习惯:

# Notebook
det notebook start --config-file config.yaml

# CMD
det cmd run --config-file config.yaml

# Shell
det shell start --config-file config.yaml

对应的停止任务指令如下:

# Notebook
det notebook kill <ID>

# CMD
det cmd kill <ID>

# Shell
det shell kill <ID>

任务的 <ID> 可通过 det task list 查看所有任务信息获得,写前8位即可。

2.4 创建实验

先下载官方的项目示例代码:mnist_pytorch.tgz。

将其解压到当前目录:

tar zxvf mnist_pytorch.tgz -C ./
cd mnist_pytorch

可以看到该目录下有单卡运行实验以及多卡并行运行实验的实验配置文件 const.yamldistributed.yaml,此处给出 distributed.yaml 配置参考内容如下:

name: mnist_pytorch_distributed
hyperparameters:
  learning_rate: 1.0
  n_filters1: 32
  n_filters2: 64
  dropout1: 0.25
  dropout2: 0.5
searcher:
  name: single
  metric: validation_loss
  max_length:
      epochs: 1
  smaller_is_better: true
entrypoint: python3 -m determined.launch.torch_distributed python3 train.py
description: test_task
resources:
  resource_pool: RTX3090
  slots_per_trial: 2
bind_mounts:
  - host_path: /home/ubuntu/
    container_path: /run/determined/workdir/asanosaki/
environment:
  image: determinedai/environments:cuda-11.8-pytorch-2.0-gpu-0.29.1
  environment_variables:
  - http_proxy=<ip_of_proxy>
  - https_proxy=<ip_of_proxy>

接下来即可通过配置文件创建任务(最后一个 . 表示上传当前目录中的所有文件,作为模型的上下文目录。Determined 将模型上下文目录内容复制到试验容器工作目录):

det experiment create distributed.yaml .

2.5 通过VSCode SSH连接

首先确保 VSCode 已经安装 Remote - SSH 扩展,当用户开启了 Shell 后,可以在终端机上执行以下命令获取 Shell 的 SSH 登录命令:

det shell show_ssh_command <SHELL UUID>

复制 SSH 命令,在 VS Code 的 Remote Explorer 页面下即可添加连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1537271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NLP】从变形金刚到Transfomer 01

Transformer是一种非常强大的模型&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域里引起了一场革命。 "从变形金刚到技术革命家&#xff0c;Transformer不再仅是儿时屏幕上的英雄。&#x1f916;✨ 在今天的AI领域&#xff0c;它变身成为自然语言处理的超级英…

TextMeshPro图文混排的两种实现方式,不打图集

TMP图文混排 方案一&#xff1a;TMP自带图文混排使用方法打包图集使用 方案二&#xff1a;不打图集&#xff0c;可以使用任何图片 接到一个需求&#xff0c;TextMeshPro 图文混排。 方案一&#xff1a;TMP自带图文混排 优点布局适应优秀&#xff0c;字体左中右布局位置都很不错…

基于SSM的土家风景文化管理平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的土家风景文化管理平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

基于springboot的“漫画之家”系统

目录 背景 技术简介 系统简介 界面浏览 背景 随着科技的不断进步&#xff0c;计算机已经变成了人们日常生活和工作不可或缺的工具。在这样的环境下&#xff0c;互联网技术被广泛运用于各个领域&#xff0c;以提升工作和生活的效率&#xff0c;推动了网络信息技术的迅猛发展…

递增四元组

解法&#xff1a; 首先都可以想到dp[i]&#xff1a;第i个元素结尾的递增四元组有dp[i]个 然后发现有一组数据&#xff1a;2,3,6,1,5,8。会出现6结尾和5结尾的递增三元组&#xff0c;也就是未来的决策受过去影响&#xff0c;专业的说就是有后效性。需要强化约束条件&#xff0…

基于springboot+vue的游戏交易系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Grass手机注册使用教程,利用闲置手机WiFi带宽赚钱

文章目录 Grass是什么&#xff1f; 项目介绍Grasss手机使用步骤第一步&#xff1a;下载狐猴浏览器第二步&#xff1a;注册账户&#xff08;已注册直接跳过&#xff09;第三步&#xff1a;安装Grass Chrome插件1、推荐离线安装2、在线安装 第四步&#xff1a;登录第五步&#xf…

随笔】Git -- 常用命令(四)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

2核4G服务器阿里云性能测评和优惠价格表

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

多线程基础 -概念、创建、等待、分离、终止

文章目录 一、 线程概念1. 什么是线程2. 线程的优点3.线程的缺点4. 线程异常5. 线程用途 二、 Linux进程VS线程1. 进程和线程2. 进程和线程的地址空间3. 进程和线程的关系 三、Linux线程控制1. POSIX线程库2. 线程创建3. 线程ID及进程地址空间布局4. 线程终止5. 线程等待6. 线程…

发布 AUR 软件包 (ArchLinux)

首发日期 2024-03-09, 以下为原文内容: 理论上来说, 我们应该平等的对待每一个 GNU/Linux 发行版本. 但是, 因为窝日常使用 ArchLinux, 所以对 ArchLinux 有一些特别的优待, 比如自己做的软件优先为 ArchLinux 打包发布. 本文以软件包 librush-bin 为例, 介绍发布 AUR 软件包的…

leecode1793 | 好子数组的最大分数 | 求给高度矩阵最大值

题目我就不念了&#xff0c;就一个字难理解&#xff0c;给的题总是这么难懂&#xff0c;总感觉出题人的语文是体育老师教的&#xff1f; 还有就是思维转变&#xff0c;才能能好的理解&#xff1f;一味的钻牛角尖死理解&#xff0c;效果不好 思维的转变 >悟性&#xff1f;&am…

以RISC-V架构的CLIC中断机制讲解:中断咬尾、中断抢占、中断晚到

1、中断的相关属性 中断所属特权模式&#xff08;M模式 > S模式 > U模式&#xff09;中断等级&#xff1a;决定是否能够抢占当前的中断中断优先级&#xff1a;影响中断的仲裁&#xff0c;优先级高时优先被响应中断编号&#xff1a;区分中断&#xff0c;影响中断的仲裁 …

农业四情监测系统的工作原理

农业四情监测系统的工作原理【TH-Q1】农业四情监测系统是一种应用现代科技手段&#xff0c;以实现对农田环境信息的实时监测和数据采集的系统。这一系统通过对农田的土壤、气象、病虫害以及作物生长状况等四个方面的实时监测&#xff0c;帮助农民和农业管理者更好地了解和掌握农…

数据结构:详解【栈和队列】的实现

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现1.3 栈的功能1.4 栈的功能的实现1.5 完整代码 2. 队列2.1 队列的概念及结构2.2 队列的实现2.3 队列的功能2.4 队列的功能的实现2.5 完整代码 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的…

opencv自定义间隔帧获取视频转存为图片的GUI界面实现

该程序功能只将mp4转为jpg 希望得到您的指导 非常感谢您观看我的博客&#xff0c;我的博客是为了记录我的学习过程同时保留我的某些可重复利用代码以方便下次使用。如果您对我的博客有任何建议还请您不吝指出&#xff0c;非常感谢您对我的指导。 背景 在实现opencv逐帧获取…

js处理数组分类

const obj [{"groupingType": "1","remark": "梨花带雨","totalRmbMoney": 7,"kyeGroupingType": "广州一组"},{"groupingType": "2","remark": "99","…

js 实现动画的两种方案对比:setTimeout vs RAF (requestAnimationFrame)

setTimeout 需手动控制频率&#xff0c;页面隐藏后仍会执行动画&#xff0c;更加耗费性能。 requestAnimationFrame 简称 RAF , 会在浏览器中每次刷新屏幕时调用一个函数&#xff0c;用于创建平滑的动画&#xff0c;因为它会自动适应屏幕的刷新率&#xff0c;无需手动控制频率。…

搭建自己的博客-拾壹博客

写在前面 唠叨两句 作为一个技术开发人员&#xff0c;没有一个自己的博客&#xff0c;人生注定缺少点什么东西&#xff0c;是不是&#xff1f;最近研究了一些博客搭建&#xff0c;本文是使用开源项目”拾壹博客“进行搭建。 推荐等级 所需技术难度&#xff1a;4星 后续自定义…

Redis中的缓存击穿

缓存击穿 缓存击穿问题也叫热点key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大压力。 &#x1f914;现象分析&#xff1a; 当线程1查询缓存时&#xff0c;未命中&#xff0c;于是从数据…