【K8S系列】大模型训练云平台动态集成vscode组件

一、概要

在AI训练云平台中,分布式训练任务是根据不同的系统镜像,利用k8s的statefulset方式在集群内部启动多个能够互相免密通信的容器环境,用户可以在当前任务启动的容器环境中利用显卡进行各种模型框架训练。通过webshell页面交互已无法满足用户的需求。

1.在不构建原有系统镜像的基础上动态解耦挂载部署可视化界面如jupyterlab、vscode等应用组件.
2.解决可视化工具在不同的分布式训练容器如何进行路由访问的问题.

本文在上述两点核心问题上提供了解决方案

二、技术栈

熟悉以下技术有助于理解使用此方案

  • k8s:ingress、service、pod、StatefulSet
  • docker
  • nginx
  • shell

三、网路架构设计

利用k8s的statefulset方式启动pod,可以设置pod副本数量
在这里插入图片描述

四、技术细节

在不构建原有系统镜像的基础上动态解耦挂载部署可视化界面如jupyterlab、vscode等应用组件。

每个pod分别管理了两个容器,同步容器container1,训练容器container2,其中训练容器对用户可见,同步容器对用户不可见,所以可以将vscode、jupyterlab等组件包部署在同步容器中。已知同步容器和训练容器在一个pod中,可以在当前pod启动时建立一个类型为EmptyDir临时共享目录,然后在启动同步容器时将vscode包mv到临时共享目录中,训练容器即可操作vscode组件。

这样处理的好处在于,如果以后需要对vscode等组件进行升级,只需要重新构建同步容器镜像即可。
在这里插入图片描述

五、关键代码

1.动态修改nginx.conf文件

#! /bin/bash
# $1 替换目标路径
# $2 是否是Horovod任务 0:否 其他大于零的数据:是,且表示分布式容器数量

urlPath=$1
containerNum=$2
#定义删除vscode开头的文件方法
deleteVscodeNginxConf() {
  vconfNum=`ls /usr/local/nginx/conf/vscode|grep vscode|grep conf|wc -l`
  if [ $vconfNum -gt 0 ];then
    cd /usr/local/nginx/conf/vscode
    rm -rf vscode*
  fi
}

#创建Horovod分布式任务nginx配置方法
createHorovodVscodeNginxConf() {
  i=0
  num=$containerNum
  while [ $i -lt $num ]
  do
    fileName="/usr/local/nginx/conf/vscode/vscode-$i.conf"
    echo "location /$urlPath-$i/ {" >> $fileName
    echo "    proxy_set_header Host \$http_host;" >> $fileName
    echo "    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" >> $fileName
    echo "    proxy_set_header Upgrade \$http_upgrade;" >> $fileName
    echo "    proxy_set_header Connection \"upgrade\";" >> $fileName
    echo "    proxy_pass http://localhost:7001/;" >> $fileName
    echo "}" >> $fileName
    i=$((i+1))
  done
}

#创建非Horovod分布式任务nginx配置方法
createVscodeNginxConf() {
  fileName="/usr/local/nginx/conf/vscode/vscode.conf"
  echo "location /$urlPath/ {" >> $fileName
  echo "    proxy_set_header Host \$http_host;" >> $fileName
  echo "    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" >> $fileName
  echo "    proxy_set_header Upgrade \$http_upgrade;" >> $fileName
  echo "    proxy_set_header Connection \"upgrade\";" >> $fileName
  echo "    proxy_pass http://localhost:7001/;" >> $fileName
  echo "}" >> $fileName
}

#-------------------------------下面是脚本执行主代码----------------------
mkdir -p /usr/local/nginx/conf/vscode
deleteVscodeNginxConf
#非Horovod分布式任务
if [ $containerNum -eq 0 ];then
  createVscodeNginxConf 
#Horovod分布式任务
else
  createHorovodVscodeNginxConf 
fi

#启动nginx
nginxNum=`ps -ef|grep nginx|grep -v grep|wc -l`
if [ ! $nginxNum -eq 0 ];then
  /usr/local/nginx/sbin/nginx -s reload
else
  /usr/local/nginx/sbin/nginx
fi

2.同步容器nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       7000;
        server_name  localhost;

	location /hf/vscode/12345678910111213/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header Upgrade $http_upgrade;
	        proxy_set_header Connection "upgrade";
            proxy_pass http://localhost:7001/;
        }
        
	include vscode/*.conf;
        
	error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

六、访问测试

通过浏览器访问k8s集群管理的容器中的vscode进程
在这里插入图片描述
并且可以提供一个操作k8s集群容器shell终端
在这里插入图片描述

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于k8s搭建智慧港口云平台集群架构规划如下: 1. 部署k8s集群:通过在物理机或虚拟机上部署k8s集群,实现集群管理和资源调度。可以选择使用公有云提供的k8s服务,如阿里云的容器服务、腾讯云的容器服务等,也可以自行搭建k8s集群。 2. 部署应用服务器:将智慧港口云平台的应用程序打包成Docker镜像,并通过k8s的Deployment或StatefulSet等资源进行部署。可以根据业务需求进行水平扩展和灰度发布等操作。 3. 部署数据库:将数据库部署在k8s集群中,可以选择使用k8s提供的StatefulSet资源,实现数据持久化和高可用性。同时,可以使用k8s提供的ConfigMap和Secret等资源,实现数据库配置和敏感信息的管理。 4. 部署缓存服务器:将缓存服务器部署在k8s集群中,可以选择使用k8s提供的StatefulSet或Deployment资源,根据业务需求进行水平扩展和自动伸缩等操作。同时,可以使用k8s提供的ConfigMap和Secret等资源,实现缓存服务器配置和敏感信息的管理。 5. 部署消息队列:将消息队列部署在k8s集群中,可以选择使用k8s提供的Deployment或StatefulSet等资源,根据业务需求进行水平扩展和自动伸缩等操作。同时,可以使用k8s提供的ConfigMap和Secret等资源,实现消息队列配置和敏感信息的管理。 6. 部署负载均衡器:将负载均衡器部署在k8s集群中,可以选择使用k8s提供的Service资源,实现流量分发和端口转发等功能。可以选择使用云厂商提供的负载均衡器,如阿里云的SLB、腾讯云的CLB等,也可以使用开源的负载均衡器,如Nginx、HAProxy等。 7. 部署监控与日志系统:使用Prometheus、Grafana等工具实现对k8s集群和应用程序的监控和告警,使用ELK等工具实现日志的收集和分析。 总之,基于k8s搭建智慧港口云平台集群架构可以实现系统的容错和负载均衡,提高系统的可靠性和性能。同时,也可以实现应用程序的快速部署和扩展,提高开发和运维的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值