新年新气象| 独享用户硬件升级对比报告

文摘   2025-01-05 09:05   江苏  

一、独享升级活动介绍


参与活动支付原来套餐半年的金额补差升级高性能计算节点,后续续费按照原套餐价格续费即可


现在参与活动的用户额外赠送5个月的时长,升级时间在支付完成14个工作日后,只需要停机1-2天。例如:基础版(6000/年)用户1月份到期支付3000,即可补差性能升级高性能节点且延长至6月份到期。(如果单位现在封账了,可以先报名预留名额。报名截止后续升级恢复原价)


此活动结束后,用户购买高性能节点,需要按照新的价格购买。在我们活动期间升级服务器的用户,后续续费按照原套餐价格续费即可,活动名额有限,先到先到。



二、理解Elapsed TimeCPU TimeWait Time

Elapsed Time表示程序运行的持续时间,也就是我们实际感受到流失的时间。

CPU Time,程序所占用的处理器时间,分为系统时间和用户时间:

User CPU Time指程序执行用户态代码所消耗的CPU时间

System CPU Time指程序在内核态消耗的CPU时间(执行系统调用等)。

Wait TimeCPU花费在等待IO操作上的总时间(包含硬盘IO和网络IO)。

哪些地方可以看到这些时间?

查看CPU整体使用情况

通过top命令可以看到机器整体的CPU使用情况

结果解读

us:用户空间占用CPU百分比

sy:内核空间占用CPU百分比

ni:用户进程空间内改变过优先级的进程占用CPU百分比

id:空闲CPU百分比

wa:等待输入输出的CPU时间百分比

hi:硬中断占用CPU的百分比

si:软中断占用CPU的百分比

st:用于有虚拟CPU的情况,用来指示被虚拟机消耗的CPU时间

查看某个命令的CPU使用情况

以下面这个代码片段为例子,其生成矩阵后对矩阵进行求逆和相乘运算,并使用R语言的system.time函数查看求逆和相乘的CPU使用情况,同时将结果存储到了日志文件中,然后在Linux终端使用time命令查看整个脚本执行的CPU使用情况。

Bashlibrary(logging)
logReset()
basicConfig(level = "INFO")
# 设置输出日志到文件addHandler(writeToFile, file = "~/demo.log", level = "INFO")
rm(list = ls())set.seed(123)
# 设置矩阵的行数n <- 5000
# 生成一个矩阵value <- rnorm(n * n, 10, 3)mat <- matrix(value, n, n)
result1 <- system.time({ # 矩阵求逆 ainv <- solve(mat)})
result1loginfo("求逆耗时 %s", result1)
result2 <- system.time({ # 矩阵相乘 re <- mat %*% t(mat)})result2loginfo("相乘耗时 %s", result2)




三、本次服务器升级涉及的硬件


1.CPU:单个CPU性能提升约200%

2.内存:内存条性能提升约200%

3.系统平台:升级为新一代的系统平台以使用新一代CPU以及内存,提高整体稳定性

执行代码的时间对比




#下面的代码其逻辑为Seurat运算,涉及硬盘与内存数据的加载,#数据等运算,是一个生信场景较好的测试代码。(代码来源于:#https://mp.weixin.qq.com/s/uOqNUpD5vK8josMZStwunA)
Bashlibrary(logging)
logReset()
basicConfig(level='INFO')
# 设置输出日志到文件,这里很关键addHandler(writeToFile, file="~/demo.log", level='INFO')
serial_func <- function() { library(Seurat)  iri <- readRDS("iri.intergrate.rds") iri[["percent.mt"]] <- PercentageFeatureSet(iri, pattern = "^MT-") # 通过线粒体的序列数来对数据进行计算 head(iri@meta.data, 5) # QC的数据存在meta.data里,可以用这个来查看前5行 VlnPlot(iri, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3) # 用小提琴图来展示QC的结果,展示了每个barcode中基因的数目、UMI数目以及线粒体基因含量的分布情况 plot1 <- FeatureScatter(iri, feature1 = "nCount_RNA", feature2 = "percent.mt") plot2 <- FeatureScatter(iri, feature1 = "nCount_RNA", feature2 = "nFeature_RNA") CombinePlots(plots = list(plot1, plot2)) # 高变基因,判断趋势及占比 # 质控,选子集,RNA数量在200与2500之间的,多的可能是低质量细胞或空drouplets,gene count多的可能是doublets or multiplets iri <- NormalizeData(iri, normalization.method = "LogNormalize", scale.factor = 10000) # 用LogNormalize法对数据进行标准化(乘10000再取对数)数据存在iri[["RNA"]]@data.里 # 默认的方法也完成了log1p的操作,得到的结果就类似于TPM的对数 iri <- FindVariableFeatures(iri, selection.method = "vst", nfeatures = 2000) # 筛选高变基因(输出2000个),用于下游的PCA及分群 top10 <- head(VariableFeatures(iri), 10) # 输出差异最大的十个基因 plot1 <- VariableFeaturePlot(iri) plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE) CombinePlots(plots = list(plot1, plot2)) # 输出差异基因散点图(有无标签) iri <- ScaleData(iri, features = rownames(iri)) # 将数据进行标准化,为后续的PCA分析做准备,数据存在iri[["RNA"]]@scale.data ## for PCA DoHeatmap # iri <- ScaleData(iri)#only4VariableFeatures iri <- ScaleData(iri, vars.to.regress = "percent.mt") # 剔除不想要的变量(如线粒体的比例) # iri[["RNA"]]@scale.data iri <- RunPCA(iri, features = VariableFeatures(object = iri)) # PCA降维分析 print(iri[["pca"]], dims = 1:5, nfeatures = 5) # 打印PCA部分结果 VizDimLoadings(iri, dims = 1:2, reduction = "pca") DimHeatmap(iri, dims = 1, cells = 500, balanced = TRUE) # 三种 PCA展示方式 DimHeatmap(iri, dims = 1:15, cells = 500, balanced = TRUE) # 展示15种PCA # 筛选合适的维度: iri <- JackStraw(iri, num.replicate = 100) # 重复计算次数 iri <- ScoreJackStraw(iri, dims = 1:20) # 计算维度这一步花的时间比较久 JackStrawPlot(iri, dims = 1:15) # 画出1到15个维度 # JackStrawPlot相当于高级PCA,为挑选合适维度进行下游可视化提供依据 ElbowPlot(iri) # 利用ElbowPlot来评价PC,PCA切记为了结果好看而降低PC数 iri <- FindNeighbors(iri, dims = 1:10) iri <- FindClusters(iri, resolution = 0.5) # 细胞分群,resolution分辨率在细胞数在3000附近时一般设为0.4-1.2,resolution越大得到的类群越多 head(Idents(iri), 5) # 看前五个分类群ID # 非线性降维方法:UMAP、tSNE iri <- RunUMAP(iri, dims = 1:10) # 运行UMAP算法 # sce.all <- RunUMAP(sce.all, dims = 1:30, min.dist = 0.01, n.neighbors = 4L) # 可以调整亚群之间的距离 iri <- RunTSNE(iri, dims = 1:10) # 运行TSNE算法,TSNE算法运行时间较UMAP更久 DimPlot(iri, reduction = "umap", label = TRUE) iri.markers <- FindAllMarkers(iri, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25) return(iri.markers)}
parallel_func <- function() { # #这里以四线程,128GB为例 makecore <- function(workcore, memory) { if (!require(Seurat)) install.packages("Seurat") if (!require(future)) install.packages("future") plan("multisession", workers = workcore) options(future.globals.maxSize = memory * 1024 * 1024**2) }
makecore(4, 128)
library(Seurat) iri <- readRDS("~/iri.intergrate.rds") iri[["percent.mt"]] <- PercentageFeatureSet(iri, pattern = "^MT-") # 通过线粒体的序列数来对数据进行计算 head(iri@meta.data, 5) # QC的数据存在meta.data里,可以用这个来查看前5行 VlnPlot(iri, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3) # 用小提琴图来展示QC的结果,展示了每个barcode中基因的数目、UMI数目以及线粒体基因含量的分布情况 plot1 <- FeatureScatter(iri, feature1 = "nCount_RNA", feature2 = "percent.mt") plot2 <- FeatureScatter(iri, feature1 = "nCount_RNA", feature2 = "nFeature_RNA") CombinePlots(plots = list(plot1, plot2)) # 高变基因,判断趋势及占比 # 质控,选子集,RNA数量在200与2500之间的,多的可能是低质量细胞或空drouplets,gene count多的可能是doublets or multiplets iri <- NormalizeData(iri, normalization.method = "LogNormalize", scale.factor = 10000) # 用LogNormalize法对数据进行标准化(乘10000再取对数)数据存在iri[["RNA"]]@data.里 # 默认的方法也完成了log1p的操作,得到的结果就类似于TPM的对数 iri <- FindVariableFeatures(iri, selection.method = "vst", nfeatures = 2000) # 筛选高变基因(输出2000个),用于下游的PCA及分群 top10 <- head(VariableFeatures(iri), 10) # 输出差异最大的十个基因 plot1 <- VariableFeaturePlot(iri) plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE) CombinePlots(plots = list(plot1, plot2)) # 输出差异基因散点图(有无标签) iri <- ScaleData(iri, features = rownames(iri)) # 将数据进行标准化,为后续的PCA分析做准备,数据存在iri[["RNA"]]@scale.data ## for PCA DoHeatmap # iri <- ScaleData(iri)#only4VariableFeatures iri <- ScaleData(iri, vars.to.regress = "percent.mt") # 剔除不想要的变量(如线粒体的比例) # iri[["RNA"]]@scale.data iri <- RunPCA(iri, features = VariableFeatures(object = iri)) # PCA降维分析 print(iri[["pca"]], dims = 1:5, nfeatures = 5) # 打印PCA部分结果 VizDimLoadings(iri, dims = 1:2, reduction = "pca") DimHeatmap(iri, dims = 1, cells = 500, balanced = TRUE) # 三种PCA展示方式 DimHeatmap(iri, dims = 1:15, cells = 500, balanced = TRUE) # 展示15种PCA # 筛选合适的维度: iri <- JackStraw(iri, num.replicate = 100) # 重复计算次数 iri <- ScoreJackStraw(iri, dims = 1:20) # 计算维度这一步花的时间比较久 JackStrawPlot(iri, dims = 1:15) # 画出1到15个维度 # JackStrawPlot相当于高级PCA,为挑选合适维度进行下游可视化提供依据 ElbowPlot(iri) # 利用ElbowPlot来评价PC,PCA切记为了结果好看而降低PC数 iri <- FindNeighbors(iri, dims = 1:10) iri <- FindClusters(iri, resolution = 0.5) # 细胞分群,resolution分辨率在细胞数在3000附近时一般设为0.4-1.2,resolution越大得到的类群越多 head(Idents(iri), 5) # 看前五个分类群ID # 非线性降维方法:UMAP、tSNE iri <- RunUMAP(iri, dims = 1:10) # 运行UMAP算法 # sce.all <- RunUMAP(sce.all, dims = 1:30, min.dist = 0.01, n.neighbors = 4L) # 可以调整亚群之间的距离 iri <- RunTSNE(iri, dims = 1:10) # 运行TSNE算法,TSNE算法运行时间较UMAP更久 DimPlot(iri, reduction = "umap", label = TRUE) iri.markers <- FindAllMarkers(iri, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25) return(iri.markers)}
loginfo("单线程耗时 %s", system.time(serial_func()))
loginfo("多线程耗时 %s", system.time(parallel_func()))

旧独独享节点:

新高性能独享节点类型1:

新高性能独享节点类型2:

CPU使用情况统计(单位为秒)


结果解读:使用高性能独享,运行测试代码,比旧独享速度提升近100%以上9585.808秒与5307.248秒对比),同时如果利用好服务器多线程的能力,可以将速度提升200%以上9585.808秒与3279.665秒对比),其性价比也比较高。



如何联系我们

公众号后台消息回复不便,这里给大家留一下客服微信号,方便各位随时交流、提建议(别问在么,添加时直接说来意)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:

永久免费的生信、科研交流群

大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容

已有生信基地联系方式的同学无需重复添加

您点的每个赞和在看,我都认真当成了喜欢


Biomamba 生信基地
本人为在读博士研究生,此公众号旨在分享生信知识及科研经验与体会,欢迎各位同学、老师与专家的批评指正,也欢迎各界人士的合作与交流。
 最新文章