Kubernetes-通过nvidia-docker2使用GPU资源

深度清理命令_搭建 Docker Swarm GPU 集群 并 部署 OpenFaas 深度学习模型算法服务 Hi 小伙伴们 大家好,我是狗哥,这次按时更新(x2)啦!本周狗哥尝试在 OpenFaas 框架中加入需要使用 GPU 计算的深度学习模型算法服务,因此需要攻克 Docker 中使用 GPU 资源的问题,经过一周的研究实践,终于找到了 Docker 使用 Nvidia 显卡资源的方案,此外还编写了一个基于 Centos 7 的 OpenFaas Python3-Flask 的 Docke... 阅读详情

目录

一. Nvidia-docker

二. Nvidia-docker2

1. 安装nvidia-docker2

2. nvidia-gpu-plugin安装

3. 容器中运行TensorFlow


一. Nvidia-docker

nvidia-docker是一个可以使用GPU的docker,在Docker基础上做了一成封装

目前为止,已发布发布两个大的稳定版本,其中nvidia-docker已经被弃用,本次做一个简单介绍

nvidia-docker 作为Docker的一个包装,需要运行一个独立的daemon,实际上是一个Volume Plugin,nvidia-docker实现了一个专门的Volume Driver,指定用这个Driver创建Volume后,会自动针对宿主的驱动的版本,收集需要透传的文件统一放到一个目录下,直接把这个目录透传给容器就行

yum install nvidia-docker-1.0.1-1.x86_64.rpm

systemctl enable nvidia-docker

systemctl start nvidia-docker

# 其中384.90是安装的驱动的版本号
docker volume create --name=nvidia_driver_384.90 -d nvidia-docker

创建好卷后,docker volume inspect nvidia_driver_384.90会发现需要透传的文件都被收集到/var/lib/nvidia-docker/volumes/nvidia_driver/384.90下了,有很多符号链接和硬链接。最后创建容器的时候,使用下面的docker run 命令行参数就能把驱动、CUDA透传到容器里

--volume=nvidia_driver_384.90:/usr/local/nvidia:ro --volume=/usr/local/cuda/lib64:/usr/local/cuda/lib64:ro -e LD_LIBRARY_PATH=/usr/local/cuda/lib64/:/usr/local/nvidia/lib:/usr/local/nvidia/lib64

二. Nvidia-docker2

nvidia-docker2是一个runtime,能更好的和docker兼容

1. 安装nvidia-docker2

nvidia-docker2对docker的版本有依赖性,我的环境如下

[root@k8s-node1 ~]# uname -a
Linux k8s-node1 4.17.6-1.el7.elrepo.x86_64 #1 SMP Wed Jul 11 17:24:30 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux

[root@k8s-node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

[root@k8s-node1 ~]# docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:23:03 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:25:29 2018
  OS/Arch:          linux/amd64
  Experimental:     false
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \
  sudo tee /etc/yum.repos.d/nvidia-docker.repo

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo yum install -y nvidia-docker2

安装后,需要配置新的Docker Runtime。 同时,也需要把默认的Runtime设为 nvidia 。

[root@k8s-node1 ~]# cat /etc/docker/daemon.json 
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

之后重启docker

systemctl restart docker

查看docker信息

[root@k8s-node1 ~]# docker info
Containers: 49
 Running: 47
 Paused: 0
 Stopped: 2
Images: 84
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: nvidia runc
Default Runtime: nvidia # 默认runtime改成了nvidia
...
...

使用镜像进行测试

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

2. nvidia-gpu-plugin安装

通过kubernetes调度GPU资源需要安装nvidia-gpu-plugin,可以通过daemonsets部署

[root@k8s-node1 ~]# cat nvidia-gpu-plugin.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-gpu-plugin
  namespace: kube-system
  labels:
    k8s-app: nvidia-gpu-plugin
    version: "1.10"
spec:
  selector:
    matchLabels:
      k8s-app: nvidia-gpu-plugin
      version: "1.10"
  template:
    metadata:
      # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
      # reserves resources for critical add-on pods so that they can be rescheduled after
      # a failure.  This annotation works in tandem with the toleration below.
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        k8s-app: nvidia-gpu-plugin
        version: "1.10"
    spec:
      tolerations:
      # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
      # This, along with the annotation above marks this pod as a critical add-on.
      - key: CriticalAddonsOnly
        operator: Exists
      containers:
      - image: nvidia-gpu-plugin:1.10
        name: nvidia-gpu-plugin
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: device-plugin
            mountPath: /var/lib/kubelet/device-plugins
      volumes:
        - name: device-plugin
          hostPath:
            path: /var/lib/kubelet/device-plugins

查看资源

[root@k8s-node1 ~]# kubectl --namespace=kube-system get daemonsets nvidia-gpu-plugin 
NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
nvidia-gpu-plugin   2         2         2       2            2           <none>          6d17h
[root@k8s-node1 ~]# 
[root@k8s-node1 ~]# 
[root@k8s-node1 ~]# kubectl --namespace=kube-system get pod | grep nvidia-gpu-plugin
nvidia-gpu-plugin-vv5zh                               1/1     Running   0          6d17h
nvidia-gpu-plugin-z8f8c                               1/1     Running   0          6d17h

nvidia-gpu-plugin创建好之后查看k8s node节点可以看到已经可以提供gpu资源了

[root@k8s-node1 ~]# kubectl get node k8s-node1 -ojson | jq '.status.allocatable'
{
  "cpu": "32",
  "ephemeral-storage": "680077411227",
  "hugepages-1Gi": "0",
  "hugepages-2Mi": "0",
  "memory": "65762860Ki",
  "nvidia.com/gpu": "2", # 已经有2个gpu资源可以使用
  "pods": "110"
}

创建包括GPU资源的Pod

[root@k8s-node1 example]# cat nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    k8s-app: nginx-pod
  name: nginx-pod
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: Always
    name: nginx
    ports:
    - containerPort: 80
      name: nginx
      protocol: TCP
    resources:
      limits:
        nvidia.com/gpu: "1"

[root@k8s-node1 example]# kubectl create -f nginx-pod.yaml 
pod/nginx-pod created

进到容器中查看,可以看到在nginx pod中可以看到已经分配了一个GPU资源

[root@k8s-node1 example]# kubectl exec -it nginx-pod bash
root@nginx-pod:/# nvidia-smi 
Tue May 28 02:56:52 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.57                 Driver Version: 410.57                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:04:00.0 Off |                  N/A |
| 25%   27C    P8     8W / 250W |      0MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

3. 容器中运行TensorFlow

容器镜像制作

GPU的tensorflow需要在指定型号上编译性能才是最佳的,编译方式参考:https://blog.youkuaiyun.com/iov_aaron/article/details/90268597

我的tensorflow是1.12版本,镜像是基于nvidia的nvidia/cuda:10.0-cudnn7-runtime-centos7镜像(https://gitlab.com/nvidia/cuda/tree/centos7/10.0)

[root@aidevops tensorflow-gpu-1.12.0]# cat Dockerfile 
FROM nvidia/cuda:10.0-cudnn7-runtime-centos7
USER root
WORKDIR /root

COPY scripts /root/scripts
COPY sshconfig/* /etc/ssh/
COPY jupyterconfig /root/.jupyter

## SSH
RUN yum install -y openssh openssh-clients openssh-server && \
    ssh-keygen -t rsa -P '' -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -P '' -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t ed25519 -P '' -f /etc/ssh/ssh_host_ed25519_key

# OpenCV
RUN yum install opencv-devel -y

# User Tools
RUN yum install vim python-imaging -y

# Jupyter
RUN yum install -y python-setuptools gcc python-devel && \
    easy_install pip==9.0.1 && \
    pip install tornado==4.5.3 graphviz==0.8.1 requests==2.18.4 && \
    pip install notebook-5.2.2-py2.py3-none-any.whl

# Tensorflow
RUN pip install tensorflow-1.12.0-cp27-cp27mu-linux_x86_64.whl

# Clean
RUN yum clean all && rm -rf /var/cache/yum*

CMD ["/root/scripts/start.sh"]

镜像制作会后使用该镜像启动容器可以正常运行tensorflow应用

 

出现的问题:

使用Tensorflow训练时报错: kernel version 418.18 does not match DSO version 410.58.0

发现nvidia/cuda:10.0-cudnn7-runtime-centos7镜像中安装的driver是410.58,但是宿主机上安装的driver是418.18

卸载物理机上的驱动,重新安装了410.57(没有找到410.58的,只找到了410.57版本的驱动:http://de.download.nvidia.com/XFree86/Linux-x86_64/410.57/NVIDIA-Linux-x86_64-410.57.run)

之后可以正常运行

nvidia docker, nvidia docker2, nvidia container toolkits三者的区别 这篇博客的起因是在docker容器中引入GPU资源时,查阅了网上许多教程,教程之间概念模糊不清,相互矛盾,过时的教程和新的教程混杂在一起。主要原因是nvidia为docker容器的支持发生了好几代变更,api发生了不少变化。下面来总结一下各代支持发展历程。 阅读详情

相关推荐

k8s中如何使用gpu、gpu资源讲解、nvidia gpu驱动安装

gpu资源也是服务器中常见的一种资源,gpu即显卡,一般用在人工智能、图文识别、大模型等领域,其中nvidia gpu是nvidia公司生产的nvidia类型的显卡,amd gpu则是adm公司生产的amd类型gpu。企业中服务器最常见的就是英伟达gpu服务器了。本篇也主要讲解英伟达驱动相关的知识。

MssGuo的博客 1万+

docker/nvidia-docker2 简单介绍

一、docker简介      docker 作为一个开源的应用容器引擎,允许开发者很方便地打包应用程序和依赖库到可移植的容器中,然后发布到任何流行的linux 设备上,docker完全使用沙箱机制,容器之间相互独立,不存在任何接口,因此,允许开发者在同一台机器上,运行不同环境的应用程序与服务,大大简化应用程序(或者服务)的运维操作,同时也提高了开发与测试效率。 二、nvidia-docker...

c++应用程序编程和调试专栏 4750

Kubernetes 集成 Nvidia GPU (详细攻略)

Kubernetes 中已经实验性地支持管理多个节点上的 AMD / NVIDIA GPU (显卡)。 本文重点介绍在k8s集群中,集成Nvidia显卡容器资源调度。

u013149714的博客 1万+

windows wsl2 docker+k8s+cuda容器无法启动问题解决

nvidia-docker最古老的容器内nvidia gpu的调用是需要在镜像(或容器)中安装与宿主机nvidia显卡驱动兼容的驱动版本,但是这一要求比较难以满足,因为如果宿主机的nvidia驱动略低于docker容器下nvidia驱动版本就很容易出现forward compatibility错误,而比较可行的就是容器内的nvidia驱动版本略低于宿主机版本。1. 使用docker而不是nvidia-docker启动原始镜像下的容器,提示文件已存在,需要删除。运行下面的三行命令也行。

xiaofeixia666888的博客 2014

nvidia-docker2-rpm.tar.gz

适合centos7的nvidia-docker2的rpm,nvidia-docker2目前支持docker-ce18.09

接口调试必看:status显示canceled的3种常见原因及修复方法

本文深度解析了接口调试中status显示canceled的三种核心原因:网络层中断(如请求超时)、应用层逻辑主动取消(如请求竞态、组件卸载)以及用户交互与浏览器行为。文章提供了从诊断到修复的系统性方案,包括分析Network Timing、使用Axios CancelToken、优化请求策略与性能,帮助开发者从根本上解决这一常见问题。

bb456的博客 936

ubuntu安装nvidia-docker k8s使用GPU资源

一、 nvidia-docker安装 卸载nvidia-docker及其它GPU容器 docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f sudo apt-get purge -y nvidia-docker 添加仓库包 curl -s -L https://nvidia.github.io/nvidia-dock

Thomson_tian的博客 1127

基于python的电商评论文本分析

本文基于京东平台安井手抓饼2000余条评论数据,运用Python文本分析技术(包括分词、词频统计、LDA主题模型等)探究消费者评价特征。研究发现:1)产品评价聚焦口味("好吃")、性价比("一分钱")和便捷性("早餐");2)京东物流服务获得高度认可;3)销售旺季集中在11月至次年1月。分析揭示了速冻食品消费者的核心关注点,为商家优化产品与服务提供数据支持,同时展示了文本挖掘技术在电商评论分析中的实用价值。

weixin_50902344的博客 8346

K8S如何使用GPU

K8S如何使用GPU 一 GPU节点安装NVIDIA显卡驱动 1 查看显卡信息 lspci | grep -i vga 02:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41) 3d:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti] (rev a...

chen_25_15的博客 3199

车辆动力学从入门到进阶之路(传统篇)

新手如何入门车辆动力学开发领域,本文为您引路!

CrazyRabbit的博客 1万+

从零到一:Admin.NET中Swagger与Knife4jUI的深度集成实践

本文详细介绍了在Admin.NET框架中深度集成Swagger与Knife4jUI的实践方法,从基础配置到高级定制,包括认证配置、安全增强、界面主题定制等。通过Furion框架简化配置,开发者可以快速构建专业且友好的API文档界面,提升团队协作效率。

defi6farmer的博客 406

K8s调度Nvidia Gpu显卡

Kubernetes使用NVIDIA驱动

RSQ博客 2607

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 238

K8s集群中NVIDIA GPU资源全流程配置指南:从驱动安装到容器化部署

本文提供了在Kubernetes集群中配置与管理NVIDIA GPU资源的完整指南。从物理节点驱动安装、禁用冲突驱动,到配置Docker容器运行时,再到部署NVIDIA Device Plugin让K8s感知GPU,最后通过实战YAML示例演示如何在Pod中申请和使用GPU资源。文章还探讨了GPU虚拟化与细粒度共享等进阶方案,帮助用户实现从单机到集群的GPU资源高效池化管理。

python9snake的博客 471

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

AI 编程工具面试题(Claude Code、Codex 等)基础篇(一)

文章摘要: 本文整理了20道AI编程工具基础面试题,涵盖Claude Code、Codex CLI、GitHub Copilot等主流工具的核心概念与实操技巧。内容分为工具分类(代码补全/对话式/自主代理)、安装配置(静默部署/API管理)、关键命令(上下文加载/token监控)、调试策略(错误处理/提示优化)及对比选型(Tabnine vs Copilot)。重点解析了终端工具与模型能力的差异,并针对实际场景(如长代码生成/私有化部署)提供解决方案。附追问环节,深入探讨工具边界问题(如上下文溢出处理)和成

篮球界最会写bug的人;程序猿中打球最菜的人。 336

Rancher搭建K8S集群并配置GPU共享完整流程

参见我的另一篇文章《RKE搭建K8S并部署阿里GPU Sharing实现GPU共享》

JavaFeng 4252

第八届传智杯WPS智能办公能力挑战赛练习题库

本文是关于WPS Office软件操作知识的选择题汇总,内容涵盖WPS文字、表格和演示三大组件的常用功能。主要包括:云文档协同编辑、文本框插入、幻灯片打印设置、数据排序与筛选、函数应用(如SUMIF、COUNT)、动画效果设置、格式刷使用、页眉页脚设置、单元格引用类型等基础操作要点。同时涉及计算机基础概念如二进制、ROM存储器等。题目以单选和多选形式呈现,附带详细答案解析,全面检验用户对WPS办公软件的功能掌握程度和实际操作能力,适用于办公软件技能培训和水平测试。

qq_73044452的博客 1424

k8s 集成 gpu

1.docker default runtime配置:修改 /etc/docker/daemon.json。1.使用 "netstat -tulpn" 查看 端口使用情况,PID 2951。1.查看可用的驱动版本"ubuntu-drivers devices"#部署Nvidia Device Plugin。3.安装nvidia-device-plugin。2.释放对应端口 "kill -9 2951"#安装NVIDIA Docker 2。#安装Nvidia驱动(root)1.配置包仓库和GPG Key。

m0_57860663的博客 817

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

centos7.9中为k8s配置英伟达gpu调度

1、Linux查看显卡信息:(ps:若找不到lspci命令,可以安装 yum install pciutils) lspci | grep -i vga 2、使用nvidia GPU可以: lspci | grep -i nvidia 3、查看显卡驱动 cat /proc/driver/nvidia/version 安装依赖环境: yum install kernel-devel gcc -y 检查内核版本和源码版本,保证一致 ls /boot | grep vmlinu rpm -aq | grep

AAAblues的博客 1102

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

k8s集群内带GPU工作节点配置显卡驱动

注:修改部署类型,如果有多台显卡,可以选择部署到有显卡的服务器。2.4、通过rancher设置容器使用显卡数量。k8s集群内带GPU工作节点配置显卡驱动。1.3、安装nvidia-docker2。2.2、部署k8s nvidia插件。2.1、修改daemon.json。2.3、K8S集群内检查显卡。1.1、官网下载驱动程序。注:cuda最好12版本。一、下载、安装显卡驱动。系统为Centos7。1.2、安装显卡驱动。二、配置环境支持显卡。

那个那个 1569

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

k8s Gpu节点安装

k8s 部件是一样的 ,就是需要特殊定制的docker docker安装 curl https://get.docker.com | sh && sudo systemctl --now enable docker systemctl status docker distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-do

屈帅波的技术博客 500

WAN2.2文生视频镜像GPU算力弹性调度:K8s集群中按需分配A10资源实践

本文介绍了如何在星图GPU平台上,自动化部署WAN2.2-文生视频+SDXL_Prompt风格镜像,并实现GPU算力的弹性调度。该方案支持在Kubernetes集群中按需分配A10等GPU资源,用户可通过简单的文本提示词,快速生成风格化的短视频内容,有效应用于创意内容制作、营销素材生成等场景,提升创作效率并优化资源成本。

weixin_42230607的博客 356

GME-Qwen2-VL-2B-Instruct部署教程:Kubernetes集群中GPU资源调度配置

本文介绍了如何在星图GPU平台上自动化部署GME-Qwen2-VL-2B-Instruct镜像,实现图文匹配功能。该平台简化了Kubernetes集群中的GPU资源调度配置,用户可快速搭建本地化AI服务,用于自动计算图片与多个文本描述的匹配度,适用于商品图与文案匹配等场景。

weixin_42594419的博客 890

AI模型容器化部署踩坑实录:37个真实报错日志+对应Docker配置修复命令(附2024最新nvidia-docker2兼容矩阵)

解决AI模型容器化部署难题,提供37个真实报错日志与Docker AI配置修复方案,覆盖CUDA版本冲突、GPU设备不可见等高频场景;附2024最新nvidia-docker2兼容矩阵,开箱即用、稳定高效,值得收藏。

FastCompile的博客 583

Anything to RealCharacters 2.5D转真人引擎部署教程:Kubernetes集群中RTX 4090资源调度

本文介绍了如何在星图GPU平台上自动化部署📸 Anything to RealCharacters 2.5D转真人引擎。该平台简化了在Kubernetes集群中调度RTX 4090等GPU资源的过程,用户可快速搭建服务,轻松将动漫或游戏角色图片转换为质感细腻的写实真人照片,适用于角色形象创作、社交媒体头像生成等场景。

weixin_42577243的博客 611
上一篇: Kubernetes-提供服务的方式
下一篇: Kubernetes-Pod资源调度
Aaron.com
博客等级 码龄17年 25粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值