【TensorFlow】GPU和显存资源的配置

FeynRules的上手使用3--运行 FeynRules的运行 接上两篇,在我们正确的设定模型参数和拉氏量之后,就可以运行FeynRules来推导费曼规则。 装载文件 首先需要设定FeynRules文件所在位置,并装载FeynRules模块: $FeynRulesPath = SetDirectory[ ] << FeynRules` 接下来是装载写好的模型文件: LoadModel[ < file.fr >, < file2.fr >, … ] 模型文件后缀为".fr",可以分几块构成。模型描述可以写在 阅读详情

随时更新……

使用指定的GPU

GPU的编号在终端输入nvidia-smi查看。

(1)在终端设置

# 设置运行该程序可见的GPU
CUDA_VISIBLE_DEVICES = 0,1,2 python your_file.py  # 指定0#,1#,2#GPU
CUDA_VISIBLE_DEVICES = "3,4" python your_file.py  # 指定3#,4#GPU
CUDA_VISIBLE_DEVICES = ""  # 不使用GPU

(2)在Python代码设置 

设置程序运行中可见的GPU设备。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

对于某个特定操作指定设备,则可以与tf.device一起使用来创建设备上下文,并且该上下文中的所有操作都将在同一指定设备上运行 。

with tf.device('/CPU:0'):
  a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
  b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
 
c = tf.matmul(a, b)
print(c)

显存使用方式

(1)直接使用

会默认占用机器可用显卡剩余的所有GPU显存,即使根本用不到那么多。

with tf.Session() as sess:

由于直接占用全部显存,只要模型大小不超过显存大小就不会产生显存碎片。适合个人使用整个服务器,或部署应用。

(2)分配一定比例的显存

创建Session时设定最多占用的显存,避免其它用户没有显存可以用。

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用90%的显存
sess = tf.Session(config = config)

适合多用户共享服务器,但是可能存在显存浪费的情况。 

(3)动态申请显存

在程序运行中动态申请显存,但是不会释放显存。若申请不到可用的显存就会报错。

config = tf.ConfigProto()
config.gpu_options.allow_growth=True
with tf.Session(config=config) as sess:

适合多用户共享服务器,形式上避免了显存浪费,但很可能在运行程序时被其他用户抢占显存资源,导致程序崩溃。

记录操作分配给哪些设备

 

 

一些好的习惯

1. 运行程序前先查看GPU和显存使用情况。

 

参考链接

Tensorflow如何使用GPU训练(笔记)

tensorflow笔记:训练模型的时候如何指定GPU进行训练

嵌入式工程师成长之路(10)——项目举例 送给大学毕业后找不到奋斗方向的你(每周不定时更新) 阅读详情

相关推荐

保姆级教程:在RK3576上配置USB网卡从零到外网访问(附udev规则详解)

本文提供了在RK3576开发板上配置USB网卡的完整教程,涵盖从内核驱动、udev规则到网络路由的全流程。重点讲解了如何利用USB Gadget功能实现高速网络连接,并构建稳定的算力集群,确保多设备间通信及外网访问。

grass的博客 458

【tensorflow】 GPU 显存分配设置

import os import tensorflow as tf config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.5 # 控制占用显卡最高显存为50%, 这个提供多人使用 config.gpu_options.allow_growth = True # 设置动态分配GPU os.environ["CUDA_VIS.

zcw1234515的博客 1770

《解锁GCC版本选择的奥秘:从入门到精通》

GCC 版本的选择是一项复杂而关键的决策,犹如一场精心策划的战略布局,贯穿于软件开发的整个生命周期。从项目需求与兼容性的深度考量,到性能与稳定性的权衡抉择,再到硬件与系统适配的精准对接,每一个环节都紧密相连,相互影响。在游戏开发行业,对性能的极致追求促使开发者青睐较新的 GCC 版本,以实现更流畅的游戏体验和更震撼的视觉效果;科学计算领域则依赖于 GCC 版本对复杂数学运算的高效优化,以应对大规模数据处理的挑战;嵌入式开发行业因硬件资源的限制和对稳定性的严苛要求,通常选择经过长期验证的稳定版本;

zheng_ruiguo的专栏 1416

【使用 jupyter notebook 进行网络训练时显存不足,设置GPU占用率】

使用jupyter notebook进行网络训练时显存不足,设置GPU占用率

m0_57190374的博客 2874

深度学习环境搭建:CUDA、Anaconda、PyTorch 完整安装与验证教程

步骤操作验证命令1安装 CUDA 工具包nvcc -V2安装 Anaconda3创建 yolo 环境4安装 PyTorch5验证 GPU。

qq_37606844的博客 320

DDS信号发生器设计避坑指南:从AD9834配置到巴特沃斯滤波实战

本文详细解析了基于AD9834芯片的DDS信号发生器设计中的关键技术要点与常见陷阱,涵盖时钟源选择、寄存器配置时序、巴特沃斯滤波器设计等核心内容。针对中高频段信号质量优化,提供了实用的解决方案和代码示例,帮助工程师规避设计误区,提升信号发生器的性能和稳定性。

2y3u4i5o6p的博客 781

TensorFlow配置GPU的分配设置方法

1. 多GPU情况下,使用指定GPU # 在Python代码中 import os os.environ["CUDA_VISIBLE_DEVICES"] = "0" 2. 设置GPU占用量 config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用GPU90%的显存 ses...

hopyGreat的博客 690

【Flink】Flink提交任务到Yarn报错Unable to close file because the last blockBP enough number of replicas

当使用 HDFS 存储文件时,每个数据块会有多个副本分布在不同的节点上,以确保数据的可靠性和容错性。然而,由于某种原因,最后一个数据块 blk_1101776325_28036289 的副本数量不足,导致无法成功关闭文件。如果确定副本数量正确,并且问题仍然存在,可以尝试手动修复副本不足的情况。异常消息表明在关闭文件时出现问题,我的原因是hadoop上有个节点有问题,导致提交到那个节点的时候,无法传递包到相关的机器上。检查 HDFS 集群的状态,确保所有节点都正常工作,没有节点宕机或网络故障等问题。

九师兄 934

深度学习笔记:windows+tensorflow 指定GPU占用内存(解决gpu爆炸问题)

目录 目录 前言 一、指定显卡 二、限制GPU用量 1、设置使用GPU的百分比 三、指定GPU并且限制GPU用量 指定第一块GPU可用 前言 最近在使用深度学习,跑了一个大的model,然后GPU炸了,上网搜索了一下如何解决这个问题,做下笔记,分享给大家。 keras在使用GPU的时候有个特点,就是默认全部占满显存。 这样如果有多个模型都需要使用GPU跑的话,那么限制是很大...

去向前方的博客 1万+

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2236

tensorflow使用tf.estimator限制gpu显存

tf.estimator是tensorflow的高阶api,使用下面代码可以实现限制显存,0.8代表使用80%的显存。 session_config = tf.ConfigProto(log_device_placement=True,allow_soft_placement=True) session_config.gpu_options.per_process_gpu_memory_fra...

233彭于晏的博客 2033

Android OTA 更新面试题及参考答案

OTA 更新即空中下载技术(Over-the-Air Technology)更新,是一种通过无线网络对移动设备的系统软件或应用程序进行远程更新的技术手段。其原理是设备通过移动网络或 Wi-Fi 连接到服务器,服务器检测设备上可更新的软件版本,当有新的版本时,将更新包发送到设备上。设备接收后,在后台自动完成更新包的下载、安装等一系列操作,无需用户手动下载完整的系统镜像或应用安装包并通过数据线等方式进行安装。例如,当手机厂商推出新的安卓系统版本或安全补丁时,就会通过 OTA 方式推送给用户。

大模型大数据攻城狮的专栏 1628

如何为TensorFlow分配GPU内存?资源配置策略

掌握TensorFlow的GPU内存管理机制,避免显存浪费与OOM错误。通过内存增长和逻辑GPU划分,实现多任务高效共存与资源隔离,提升开发效率与生产环境稳定性,充分发挥硬件潜力。

weixin_28939623的博客 735

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

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

TensorFlow中tf.config API配置GPU资源全指南

深入讲解TensorFlow中tf.config API如何精确管理GPU资源,涵盖可见设备控制、动态内存增长、显存限制与虚拟GPU分割等核心技巧,帮助开发者在多任务、容器化和共享环境中高效稳定地利用GPU,避免显存溢出与资源冲突。

weixin_34438187的博客 802

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Tensorflow设置显存自适应,显存比例

1 终端执行程序时设置使用的GPU 如果电脑有多个GPU,tensorflow默认全部使用。如果想只使用部分GPU,可以设置CUDA_VISIBLE_DEVICES。在调用python程序时,可以使用(见第一个参考网址Franck Dernoncourt的回复): CUDA_VISIBLE_DEVICES=1 python my_script.py     Environment V...

DRACOYU的博客 1879

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TensorFlow的GPU使用相关设置整理

TensorFlow是一个在机器学习和深度学习领域被广泛使用的开源软件库,用于各种感知和语言理解任务的机器学习。默认情况下,TensorFlow 会映射进程可见的所有 GPU(取决于 CUDA_VISIBLE_DEVICES)的几乎全部内存。这是为了减少内存碎片,更有效地利用设备上相对宝贵的 GPU 内存资源。但有时我们不需要这种特性,所以需要想办法避免这种情况。本文简要介绍TensorFlow的GPU使用相关设置。

TracelessLe的专栏 4409

TensorFlow指定特定GPU以及占用显存的比例

因为LZ是使用GPU服务器跑TensorFlow,而TensorFlow默认的是占用所有GPU,于是为了不影响其他同学使用GPU,于是就试验和总结了一下TensorFlow指定GPU的方法。。 环境 系统:Ubuntu14.04 TensorFlow:v1.3 GPU 8个GTX1080,第一列的0~7的数是GPU的序号 一.设置指定GPU 1.一劳永逸的方法,直接在~/.

m0_37041325的博客 3万+

TensorFlow指定GPU设备、分配显存

一、使用GPU加速运算        1.TensorFlow程序中可以通过tf.device函数来指定运行的设备。          CPU名称为"/cpu:0",即使有多个CPU,所有的CPU都使用/cpu:0作为名称。          GPU则不同,是"/gpu:n",n可替换。n=0,即是第一个GPU,以此类推。        2.观察每个运算所用的设备:          使用log_...

Im_Chenxi的博客 1万+

tensorflow gpu使用情况

tensorflow 默认使用所有gpu的所有显存,只是运行一个小程序,也会占用所有的gpu资源。nvidia-smi -l #实时返回gpu的使用情况四个gpu分别为0,1,2,3 可以使用cuda命令进行gpu的选择: CUDA_VISIBLE_DEVICES=1 ,只使用gpu 1 CUDA_VISIBLE_DEVICES=0,1 使用gpu 0 和 1 在使用tensorflow的时候

xxiaozr的博客 4539

Tensorflow设置gpu显存使用比例

一般情况下,tf程序会再运行时占用gpu所有显存。可以通过会话设置,使得代码只是用gpu一定比例的显存: config = tf.ConfigProto() congfig.gpu_options.per_process_gpu_memory_fraction = 0.4 sess = tf.Session(config =config ) ...

libing101007的博客 1400

Tensorflow设置GPU显存按需分配

按需要自动分配,避免Tensorflow一次性占满 gpu_options = tf.GPUOptions(allow_growth=True) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) # sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_opt...

hiudawn 8974

tensorflow GPU显存控制

参考资料:https://www.tensorflow.org/tutorials/using_gpu 文中提到了两个控制方法:设置使用显存的百分比,以及设置逐渐增加使用的GPU显存。 关于第一种方法,可以参考Keras指定使用GPU、Keras设定GPU使用内存大小(Tensorflow backend)。 这里翻译第二种方法,代码如下:config = tf.ConfigProto() c

silent56_th的博客 2058

Tensorflow 设置GPU按需分配 memory

import tensorflow as tf def Set_GPU_Memory_Growth(): gpus = tf.config.experimental.list_physical_devices('GPU') if gpus: try: # 设置 GPU 显存占用为按需分配 for gpu in gpus: tf.config.experimenta...

coolsunxu的博客 4111

tensorflow 显存 训练_Tensorflow与Keras自适应使用显存的方法

Tensorflow与Keras自适应使用显存的方法发布时间:2020-06-23 09:27:39来源:亿速云阅读:318作者:清晨这篇文章将为大家详细讲解有关Tensorflow与Keras自适应使用显存的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Tensorflow支持基于cuda内核与cudnn的GPU加速,Keras出现较晚,为Tensorfl...

weixin_39585675的博客 219

batchsize和数据量设置比例_Keras - GPU ID 和显存占用设定步骤

初步尝试 Keras (基于 Tensorflow 后端)深度框架时, 发现其对于 GPU 的使用比较神奇, 默认竟然是全部占满显存, 1080Ti 跑个小分类问题, 就一下子满了. 而且是服务器上的两张 1080Ti.服务器上的多张 GPU 都占满, 有点浪费性能.因此, 需要类似于 Caffe 等框架的可以设定 GPU ID 和显存自动按需分配.实际中发现, Keras 还可以限制 GPU 显...

weixin_39560029的博客 878
上一篇: 【Linux】文件和目录管理指令
coderwait
博客等级 码龄9年 20粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值