LogoTensorFusion 文档
LogoTensorFusion 文档
首页

快速开始

TensorFusion 概览在 Kubernetes 安装在虚拟机/服务器安装(K3S)Helm 快速安装在宿主机/虚拟机安装TensorFusion 架构

应用操作

创建 AI 应用注解使用场景配置自动扩缩容迁移现有应用最佳实践

自定义AI基础设施

生产级部署指南QoS 级别与计价云厂商集成(BYOC)管理许可证

维护与优化

组件更新配置告警GPU 热迁移预加载模型优化 GPU 效率

故障排除

问题处理手册链路追踪/性能分析查询指标和日志

参考

对比

与 NVIDIA vGPU 对比与 MIG/MPS 对比与趋动科技对比与 NVIDIA Run:ai 对比与 HAMi 的对比

在虚拟机/服务器安装(K3S)

在服务器或虚拟机上用 K3s 搭建集群,再安装 TensorFusion

TensorFusion 的 GPU 资源池运行在 Kubernetes 上。如果手里只有物理机或虚拟机,按本文先把它们组成一个轻量的 K3s 集群,把 GPU 服务器作为节点加入,之后安装 TensorFusion 的方式和其他 Kubernetes 集群完全一样。

K3s 与这些机器上已有的服务并存,不需要把现有服务容器化,也不需要迁移。

如果已经有 Kubernetes 集群,直接看在 Kubernetes 安装。如果想不经过 Kubernetes,在虚拟机里直接使用宿主机的 GPU,见在宿主机/虚拟机安装。

前置条件

  • 一台 Linux 机器,用作 K3s server(控制面)。有没有 GPU 都可以。
  • 一台或多台带 NVIDIA GPU 的 Linux 机器。server 所在的机器也可以是其中之一。
  • 每台 GPU 机器已安装 NVIDIA 驱动,nvidia-smi 能正常运行。不能运行时先安装驱动。
  • 每台机器都有 root 权限。本文所有命令都以 root 身份执行。
  • GPU 机器能访问 server 机器的 6443 端口。
  • 每台机器能从 Docker Hub 拉取镜像,或者使用下一节的镜像加速配置。

选择下载源

在每台机器上先执行下面其中一组命令,再做后面的步骤。后面的命令会用到 $K3S_INSTALL_URL。

export K3S_INSTALL_URL=https://get.k3s.io
export K3S_INSTALL_URL=https://rancher-mirror.rancher.cn/k3s/k3s-install.sh
export INSTALL_K3S_MIRROR=cn

# 通过镜像站拉取镜像,并把 tensorfusion/* 镜像改为从国内镜像仓库拉取
mkdir -p /etc/rancher/k3s/
cat > /etc/rancher/k3s/registries.yaml << 'EOF'
mirrors:
  docker.io:
    endpoint:
      - "https://docker.m.daocloud.io"
      - "https://docker.1ms.run"
  gcr.io:
    endpoint:
      - "https://gcr.m.daocloud.io"
  ghcr.io:
    endpoint:
      - "https://ghcr.m.daocloud.io"
  registry.k8s.io:
    endpoint:
      - "https://k8s.m.daocloud.io"
  nvcr.io:
    endpoint:
      - "https://nvcr.m.daocloud.io"
  quay.io:
    endpoint:
      - "https://quay.m.daocloud.io"
configs:
  "docker.io":
    auth: {}
    tls: {}
    rewrite:
      "^docker.io/tensorfusion/(.*)": "registry.cn-hangzhou.aliyuncs.com/tensorfusion/$1"
EOF

第 1 步:准备每台 GPU 机器

每台带 GPU 的机器都要做这一步,server 机器如果有 GPU 也一样。必须在这台机器安装 K3s 之前完成。

  1. 安装 NVIDIA Container Toolkit。其他发行版参考 NVIDIA 安装指南。

    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
    curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
      sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
      tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    
    apt-get update
    apt-get install -y nvidia-container-toolkit
    curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
      tee /etc/yum.repos.d/nvidia-container-toolkit.repo
    
    dnf install -y nvidia-container-toolkit
    # 没有 dnf 时:yum install -y nvidia-container-toolkit
    curl -fsSL https://mirrors.ustc.edu.cn/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
    curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
      sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \
      tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    
    apt-get update
    apt-get install -y nvidia-container-toolkit
    curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
      sed 's#nvidia.github.io/libnvidia-container/stable/#mirrors.ustc.edu.cn/libnvidia-container/stable/#g' | \
      sed 's#nvidia.github.io/libnvidia-container/experimental/#mirrors.ustc.edu.cn/libnvidia-container/experimental/#g' | \
      tee /etc/yum.repos.d/nvidia-container-toolkit.repo
    
    dnf install -y nvidia-container-toolkit
    # 没有 dnf 时:yum install -y nvidia-container-toolkit
  2. 把 NVIDIA runtime 设为 K3s 的默认容器运行时。K3s 启动时会读取这个模板:

    mkdir -p /var/lib/rancher/k3s/agent/etc/containerd/
    cat > /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl << 'EOF'
    version = 2
    
    [plugins."io.containerd.internal.v1.opt"]
      path = "/var/lib/rancher/k3s/agent/containerd"
    [plugins."io.containerd.grpc.v1.cri"]
      stream_server_address = "127.0.0.1"
      stream_server_port = "10010"
      enable_selinux = false
      enable_unprivileged_ports = true
      enable_unprivileged_icmp = true
      device_ownership_from_security_context = false
      sandbox_image = "rancher/mirrored-pause:3.6"
    
    [plugins."io.containerd.grpc.v1.cri".containerd]
      snapshotter = "overlayfs"
      disable_snapshot_annotations = true
    
    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/var/lib/rancher/k3s/data/cni"
      conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d"
    
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"
    
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
      SystemdCgroup = true
      BinaryName = "/usr/bin/nvidia-container-runtime"
    
    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/var/lib/rancher/k3s/agent/etc/containerd/certs.d"
    EOF

    这个模板是 containerd 配置的第 2 版格式。内置 containerd 2.x 的 K3s 版本改为读取 config-v3.toml.tmpl。如果安装后 GPU Pod 里看不到 GPU,请按你的 K3s 版本查阅 K3s 文档中关于 NVIDIA 容器运行时的说明。

第 2 步:安装 K3s server

在 server 机器上,按机器是否有 GPU 选择对应的命令。--tls-san 把机器的公网 IP 加进 API server 证书,这样才能从外部用 kubectl 访问;只在内网访问集群时可以去掉这个参数。

curl -sfL $K3S_INSTALL_URL | sh -s - server --tls-san $(curl -s https://ifconfig.me)
# 先在这台机器上完成第 1 步
curl -sfL $K3S_INSTALL_URL | sh -s - server \
  --node-label nvidia.com/gpu.present=true \
  --tls-san $(curl -s https://ifconfig.me)

TensorFusion 靠标签 nvidia.com/gpu.present=true 识别 GPU 节点。

确认 server 节点为 Ready,然后查看加入集群用的 token,下一步要用:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes
cat /var/lib/rancher/k3s/server/node-token

第 3 步:把 GPU 机器加入集群

在其余每台 GPU 机器上,先完成第 1 步,再执行:

export MASTER_IP=<server 机器的内网 IP>
export K3S_TOKEN=<第 2 步得到的 token>

curl -sfL $K3S_INSTALL_URL | K3S_URL=https://$MASTER_IP:6443 K3S_TOKEN=$K3S_TOKEN \
  INSTALL_K3S_EXEC="--node-label nvidia.com/gpu.present=true" sh -s -

如果安装脚本因为 container-selinux 依赖报错,设置下面的变量后重新执行安装命令:

export INSTALL_K3S_SKIP_SELINUX_RPM=true

第 4 步:检查 GPU 节点

在 server 机器上执行:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes -l nvidia.com/gpu.present=true

每台 GPU 机器都应该出现在列表里,状态为 Ready:

NAME         STATUS   ROLES    AGE   VERSION
gpu-node-1   Ready    <none>   2m    v1.32.1+k3s1

第 5 步:安装 TensorFusion

  1. 在 server 机器上安装 Helm,K3s 不自带 Helm。保持 KUBECONFIG=/etc/rancher/k3s/k3s.yaml 这个环境变量,Helm 和 kubectl 才能连上集群。

  2. 从两种安装方式里选一种:

    • 在 Kubernetes 安装:把集群接入 TensorFusion 控制台。
    • Helm 快速安装:只用 Helm。

    如果前面选了中国大陆镜像加速,Helm 命令里还要加上 -f https://download.tensor-fusion.ai/values-cn.yaml,两篇文档里都有说明。

  3. 按所选文档里的验证步骤操作,最后会有一个测试 Pod 跑在 vGPU 上。

卸载

  1. 卸载 TensorFusion,见在 Kubernetes 安装的卸载一节。

  2. 在每台以 agent 身份加入的 GPU 机器上卸载 K3s:

    /usr/local/bin/k3s-agent-uninstall.sh
  3. 在 server 机器上卸载 K3s:

    /usr/local/bin/k3s-uninstall.sh

下一步

  • 创建 AI 应用:把自己的应用跑在 vGPU 上。
  • 迁移现有应用:把现在使用 GPU 的服务迁到 TensorFusion。
  • TensorFusion 架构:各组件如何协作。

在 Kubernetes 安装

用 Helm 在现有 Kubernetes 集群上安装 TensorFusion,并接入 TensorFusion 控制台

Helm 快速安装

只用 Helm 安装 TensorFusion,不安装 cluster agent,也不接入 TensorFusion 控制台

目录

前置条件
选择下载源
第 1 步:准备每台 GPU 机器
第 2 步:安装 K3s server
第 3 步:把 GPU 机器加入集群
第 4 步:检查 GPU 节点
第 5 步:安装 TensorFusion
卸载
下一步