OrionX vGPU 研发测试场景下最佳实践之CodeServer模式

news2024/12/25 9:06:00

在之前的文章中,我们讲述了OrionX vGPU基于SSH模式、以及Jupyter模式下的最佳实践(文末附回顾链接~),今天,让我们走进CodeServer模式的最佳实践。

  • • CodeServer模式:微软的VSCode的服务器版本,近年很多企业在采用该工具,使用资源的方式类似Jupyter,也是部署在虚机或者容器当中。

环境准备

环境包含物理机器或者虚机,网络环境、GPU卡,操作系统以及容器平台。

硬件环境

本次POC环境准备三台虚机,其中一台CPU节点,两台GPU节点,每台GPU节点有一块T4卡。

操作系统为ubuntu 18.04

管理网络:千兆TCP

远程调用网络:100G RDMA

Kubernetes环境

三个节点安装K8S环境,可以使用kubeadm来安装,或者一些部署工具:

  • • kubekey

  • • kuboard-spray

当前部署kubernetes环境如下:

root@sc-poc-master-1:~# kubectl get node
NAME              STATUS   ROLES                         AGE    VERSION
sc-poc-master-1   Ready    control-plane,master,worker   166d   v1.21.5
sc-poc-worker-1   Ready    worker                        166d   v1.21.5
sc-poc-worker-2   Ready    worker                        166d   v1.21.5

其中master为CPU节点,worker节点为2个T4 GPU节点。

OrionX vGPU池化环境

参考趋动科技《OrionX 实施方案-K8S版》

部署完之后我们可以在OrionX的namespace查看OrionX组件:

root@sc-poc-master-1:~# kubectl get pod -n orion 
NAME                                 READY   STATUS    RESTARTS   AGE
orion-container-runtime-hgb5p        1/1     Running   3          63d
orion-container-runtime-qmghq        1/1     Running   1          63d
orion-container-runtime-rhc7s        1/1     Running   1          46d
orion-exporter-fw7vr                 1/1     Running   0          2d21h
orion-exporter-j98kj                 1/1     Running   0          2d21h
orion-gui-controller-all-in-one-0    1/1     Running   2          87d
orion-plugin-87grh                   1/1     Running   6          87d
orion-plugin-kw8dc                   1/1     Running   8          87d
orion-plugin-xpvgz                   1/1     Running   8          87d
orion-scheduler-5d5bbd5bc9-bb486     2/2     Running   7          87d
orion-server-6gjrh                   1/1     Running   1          74d
orion-server-p87qk                   1/1     Running   4          87d
orion-server-sdhwt                   1/1     Running   1          74d

开发机场景:Code Server模式

VScode 是目前非常流行的编辑器之一,深受越来越多的研发人员使用,但是他也有一些限制,比如环境的统一,随时随地的开发,受限于本地电脑的性能等问题,那么如何在享受VScode好用的同时解决以上问题呢,通过code-server web IDE的工具的方式。code-server 是 coder 公司基于微软开源的 Visual Studio Code 开发的一款产品。code-server 的目标是为开发者构建一个便捷统一的开发环境,让开发者能从任意设备、任意位置通过浏览器来进行代码的编写,从而免去了常规的 IDE 开发流程中的环境搭建的问题。

那么本节内容我们基于code-server结合OrionX vGPU打造一个在线云原生AI IDE开发环境,通过OrionX的能力进行动态的调用vGPU资源,实现GPU资源的分时复用,大大提高开发使用效率。

制作镜像

codeserver官方的镜像没有包含CUDA相关程序,所以我们根据自己的需要制作一个带CUDA的镜像,直接使用NVidia官方的CUDA镜像,dockerfile如下

# Dockerfile
FROM nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04
# USER root
RUN rm /etc/apt/sources.list.d/cuda.list
RUN rm /etc/apt/sources.list.d/nvidia-ml.list
WORKDIR /root
RUN  sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

ENV LANG C.UTF-8
RUN apt-get update && DEBIAN_FRONTEND="noninteractive" TZ="Asia/Shanghai" apt-get -y install tzdata
# Install necessary packages
RUN apt-get update && apt-get install -y \
        software-properties-common \
        wget \
        git \
        curl \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt install -y python3.8
RUN apt install python3-pip -y
RUN pip install pip -U && pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple



COPY install.sh /root/install.sh
RUN sh /root/install.sh

ENTRYPOINT ["code-server", "--host", "0.0.0.0", "/root/code"]
EXPOSE 8080

通过docker build -t codeserver:cuda-112-1 .生成镜像

部署codeserver

这里一样通过K8S来部署,yaml文件如下code-server-deployment.yaml

apiVersion: v1
kind: Service
metadata:
  name: code-server
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: code-server
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: code-server
spec:
  selector:
    matchLabels:
      app: code-server
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: code-server
    spec:
      nodeName: sc-poc-worker-2
      containers:
      - image: codeserver:cuda-112-1
        name: code-server
        ports:
        - containerPort: 8080
          name: code-server
        resources:
          requests:
            virtaitech.com/gpu: 1
          limits:
            virtaitech.com/gpu: 1
        env:
          - name : ORION_DRIVER_ONLY
            value : "true"
          - name : PASSWORD
            value : "code123"
          - name : ORION_GMEM
            value : "10000"
          - name : ORION_RATIO
            value : "50"
          - name: ORION_VGPU
            value: "1"
          - name: ORION_RESERVED
            value: "0"
          - name: ORION_CROSS_NODE
            value: "1"
          - name: ORION_CLIENT_ID
            value: "orion"
          - name : ORION_GROUP_ID
            valueFrom:
              fieldRef:
                fieldPath: metadata.uid
          - name: ORION_K8S_POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: ORION_K8S_POD_UID
            valueFrom:
              fieldRef:
                fieldPath: metadata.uid

1、为了方便,svc通过NodePort访问

2、设置了codeserver的访问密码为code123,后续登录时需要

3、同样设置了算力和显存的大小

通过kubectl create -f code-server-deployment.yaml部署,部署之后通过NodePort访问

图片

这样一个云原生AI IDE就诞生了,通过界面我们发现这跟VScode一模一样。

使用codeserver进行AI开发
  • • 首先安装python的插件

通过搜索python,安装python的插件

图片

  • • 安装TensorFlow

安装TensorFlow有多种方法,最常用的就是pip和conda,我们这里通过conda安装,我们在codeserver上通过terminal安装conda,打开terminal在清华大学的源上下载miniconda,

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh
./Miniconda3-py38_4.12.0-Linux-x86_64.sh

通过conda创建一个自己的env环境

conda create -n penn-1
# 进入创建的env环境
conda activate penn-1

在自己的env环境通过conda安装TensorFlow:

conda install tensorflow-gpu==2.6.2
conda install tensorflow-datasets
  • • 测试

我们通过官方的测试用例进行测试,在codeserver创建一个文件,语言选择python,然后贴入以下代码:

import tensorflow as tf
import tensorflow_datasets as tfds
(ds_train, ds_test), ds_info = tfds.load(
    'mnist',
    split=['train', 'test'],
    shuffle_files=True,
    as_supervised=True,
    with_info=True,
)

def normalize_img(image, label):
  """Normalizes images: `uint8` -> `float32`."""
  return tf.cast(image, tf.float32) / 255., label

ds_train = ds_train.map(
    normalize_img, num_parallel_calls=tf.data.AUTOTUNE)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)
ds_train = ds_train.batch(128)
ds_train = ds_train.prefetch(tf.data.AUTOTUNE)

ds_test = ds_test.map(
    normalize_img, num_parallel_calls=tf.data.AUTOTUNE)
ds_test = ds_test.batch(128)
ds_test = ds_test.cache()
ds_test = ds_test.prefetch(tf.data.AUTOTUNE)

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10)
])
model.compile(
    optimizer=tf.keras.optimizers.Adam(0.001),
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],
)

model.fit(
    ds_train,
    epochs=6,
    validation_data=ds_test,
)

官方的测试用例:https://www.tensorflow.org/datasets/keras_example

然后我们选择右上角的三角启动执行任务:

图片

 

查看OrionX的UI界面,我们看到任务正在执行,同时也可以监控vGPU的资源利用率

图片

在任务执行完毕,资源自动释放。通过该方式我们同样在企业或者教学当中实现了GPU的分时复用,使得资源利用率大大提高。

图片

以上就是OrionX vGPU在CodeServer模式下的开发机场景的最佳实践,OrionX AI算力资源池化解决方案针对GPU管理粗放给出了相应的解决思路,旨在为用户提高GPU利用率、提供灵活调度平台、统一管理算力资源,实现弹性扩展,按需使用。欢迎留言探讨!

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

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

相关文章

匿名管道详解

进程间通讯的目的 数据传输:一个进程需要把它的数据发送给另一个数据资源共享:多个进程需要共享同样的资源通知事件:一个进程需要向另一个或者一组进程发送消息,通知它发生了某种事件(如进程终止时要通知父进程&#…

Python数据分析-Steam 收入排名前 1500 的游戏

一、研究背景 随着全球数字化进程的加速,电子游戏产业已成为全球娱乐产业的重要组成部分,吸引了越来越多的资本与消费者关注。特别是基于互联网的游戏平台,如Steam,已成为全球范围内发行和销售游戏的重要渠道。Steam平台不仅为玩…

高通Liunx 系统镜像编译

本文将会介绍如何在编译高通Liunx代码, 具体可以在高通 Linux | 高通下查看相关信息。 编译服务器配置 首先,准备一台Ubuntu 22.04版本主机或者服务器 1,编译Yocto 系统,需要如下一些配置 sudo apt update sudo apt install repo gawk wg…

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式)

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1h7Dc0MiiRgtd7524cBUOFQ?pwdfr9y 提取码:fr9y 数据集信息介绍: 共有 1493 张图像和一一对应的标注文件 标…

STM32—I2C

1.I2C I2C总线(Inter l0 BUs)是由Philips公司开发的一种通用数据总线两根通信线:SCL(Serial Clock)、SDA(Serial Data)同步,半双工带数据应答支持总线挂载多设备(一主多从、多主多从) MPU6050模块:可以进行姿态测量,使用了12C通信协议 第3个…

IAPP发布《2024年人工智能治理实践报告》

文章目录 前言一、黑箱问题►透明度、可理解性与可解释性二、法律和政策中的注意事项►欧盟的《通用数据保护条例》►欧盟的AI法案►NIST的AI风险管理框架►美国的第14110号行政命令►《生成式人工智能服务管理暂行办法》►新加坡的AI验证三、实施人工智能治理►模型卡与系统卡…

2023高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 蔬菜类商品不同品类或不同单品之间可能存在一定的关联关系,请分析蔬菜各品类及单品销售量的分布规律及相互关系。数据预处理数据合并提取年、月、日信息对蔬菜的各品类按月求销量均值 季节性时间序列分解STL分解加法分解乘法分解 ARIMALSTM import p…

热成像目标检测数据集

热成像目标检测数据集 V2 版本 项目背景 热成像技术因其在安防监控、夜间巡逻、消防救援等领域的独特优势而受到重视。本数据集旨在提供高质量的热成像图像及其对应的可见光图像,支持热成像目标检测的研究与应用。 数据集概述 名称:热成像目标检测数据…

多目标优化算法求解LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集,MATLAB代码

LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集是用于评估大规模多目标优化算法性能的一组标准测试问题。这些测试问题通常具有大量的决策变量和目标函数,旨在模拟现实世界中的复杂优化问题。 LSMOP测试集包含多个子问题&am…

深度学习之微积分预备知识点

极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

2024 VMpro 虚拟机中如何给Ubuntu Linux操作系统配置联网

现在这是一个联网的状态 可以在商店里面下载东西 也能ping成功 打开虚拟网络编辑器 放管理员权限 进行设置的更改 选择DNS设置 按提示修改即可 注意的是首选的DNS服务器必须是114.114.114.114 原因 这边刚刚去查了一下 114.114.114.114 是国内的IP地址 8.8.8.8 是国外的I…

【人工智能】OpenAI最新发布的o1-preview模型,和GPT-4o到底哪个更强?最新分析结果就在这里!

在人工智能的快速发展中,OpenAI的每一次新模型发布都引发了广泛的关注与讨论。2023年9月13日,OpenAI正式推出了名为o1的新模型,这一模型不仅是其系列“推理”模型中的首个代表,更是朝着类人人工智能迈进的重要一步。本文将综合分析…

PFC和LLC的本质和为什么要用PFC和LLC电路原因

我们可以用电感和电容的特性,以及电压和电流之间的不同步原理来解释PFC(功率因数校正)和LLC(谐振变换器)。 电感和电容的基本概念 电感(Inductor): 电感是一种储存电能的组件。它的…

PhotoZoom Pro / Classic 9.0.2激活版安装激活图文教程

图像格式中,位图格式的图像是由点阵像素组成的数据文件,所以呢在把位图图像放大的时候,就会发现看到它是由于许多点构成,这就是为什么数码照片在使用普通的工具放大时会失真的原因。不过呢由于一些日常需求,我们经常需…

图神经网络模型扩展5--3

以图卷积网络为例,在每一层卷积中,我们需要用到两个输入A∈Rnn 和X∈Rnd。 很容易想象,当输入的图数据很大时(n 很大),图卷积网络的计算量是很大的,所需要的内存也是很大的。推广到更一般的信息传递网络,在每一层中&am…

Python 课程12-Python 自动化应用

前言 Python 自动化应用 可以帮助开发者节省时间和精力,将重复性、手动操作变为自动化脚本。例如,Python 可以用于自动化处理文件、邮件、生成报表,甚至可以控制浏览器执行复杂的网页操作任务。借助 Python 的强大库和工具,可以轻…

Kubernetes 常用指令2

kubernetes 常用命 令 1. 编写 yaml 文件 2. kubectl create 通过配置文件名或标准输入创建一个集群资源对象,支 持 json 和 yaml 格式的文件 语法: kubectl create -f 文件名 kubectl create deployment 资源名 --image镜像名 kubectl create deplo…

视频格式转为mp4(使用ffmpeg)

1、首先安装ffmpeg,下载链接如下 https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1.1-full_build.7z 安装后确保ffmpeg程序加到PATH路径里,cmd执行ffmpeg -version出现下图内容表示安装成功。 2、粘贴下面的脚本到文本文件中,文件后缀…

【Linux进程控制】进程创建|终止

目录 一、进程创建 fork函数 写时拷贝 二、进程终止 想明白:终止是在做什么? 进程退出场景 常见信号码及其含义 进程退出的常见方法 正常终止与异常终止 exit与_exit的区别 一、进程创建 fork函数 在Linux中fork函数是非常重要的函数&#x…

魔方财务升级指南

本文将详细介绍如何升级魔方财务系统,确保您能够顺利地更新到最新版本。 重要提示 在进行任何系统升级之前,请务必备份数据。这是良好的习惯,也是我们的建议。 备份数据库,并下载到本地。最好将网站目录文件打包,并…