当前位置: 首页 > news >正文

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎,中文互联网领域领先的问答社区和原创内容平台,2011 年 1 月正式上线,月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法,数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。

为了提高系统的易用性和灵活性,知乎实施了多云混合部署架构,允许不同云上的作业和服务透明地处理文件,且用户可以在容器中灵活与文件交互,无需关注文件的具体存放位置。

面对多云混合部署架构的需求,知乎于 2022 年引入了 JuiceFS 社区版,创建了一个可跨多个公有云使用的分布式文件系统。这一系统在性能上满足了大规模读写操作和用户实时交互的需求。针对大规模的 LLM 训练等高性能需求场景,知乎又采用了 JuiceFS 企业版,以保障 Checkpoint 写入的稳定性,并提升 GPU 效率。

目前,知乎已在 JuiceFS 社区版上存储了 3.5PB 的数据,主要用于机器学习应用,而企业版则用于性能要求更高的任务。本文将分享知乎如何在多云混合部署架构中构建存储层、保障 LLM 训练稳定性以及跨云 PB 级数据迁移的经验。

01 机器学习平台的业务需求与挑战

机器学习平台架构

知乎的机器学习平台服务于知乎及面壁智能的数百名算法工程师,这个平台依托于先进的数据处理和机器学习技术,使工程师能够有效地处理海量数据,并进行复杂的算法训练与推理任务。

应用层:知乎的核心推广业务涵盖了首页推荐、广告和搜索功能。作为一个丰富的图文生态系统,知乎不仅包含文本内容,还拥有大量图像资源,因而在视觉和自然语言处理(NLP)方面均需机器学习技术支持。自去年起,大型语言模型(LLM)的需求持续上升。

image.png

机器学习平台内部组织:用户通过界面(UI)与命令行工具使用机器学习平台的各种功能。这些功能模块覆盖了数据集管理、模型训练、笔记本、推理服务和镜像构建。

知乎与面壁智能公司展开深度合作,共同开发大型语言模型。面壁智能,同时还运营了 BMB 社区,BMB 社区提供了专门针对大型模型训练的框架 BMTrain 训练引擎,同时还有一些算法同学使用 DeepSpeed。在网页搜索和推荐场景中,我们广泛应用了 PyTorch 和 TensorFlow。在模型推理方面,目前涵盖了多种在线服务组件,包括 vLLM 、NVIDIA Triton 和我们自主研发的 CPM server,这些组件均部署在多个 GPU 集群上。

底层存储:我们采用 HDFS、JuiceFS 和云盘作为基础的物理存储解决方案,支撑整个机器学习平台的存储需求。

业务需求

  • POSIX 协议支持:在模型训练,特别是使用笔记本进行新模型探索的过程中,经常出现对大文件读写的需求,如读取样本数据和写入 checkpoint。此时,通常会利用各种开源训练引擎或框架直接从文件系统读写数据,这就使得对 POSIX 协议的支持变得至关重要。这也解释了尽管我们最初采用了 HDFS,但由于其在 POSIX 协议支持上的不足,我们没有对其进行持续的迭代。

    为了实现支持 POSIX 协议,我们期望以简单的挂载方式将文件系统直接集成进容器,允许程序通过标准 Linux IO 接口进行文件操作。这样不仅可以保证所有容器中文件内容的一致性(即使是在弱一致性的条件下),而且还能满足随机写的需求,这对于我们的应用场景至关重要。此外,从系统管理角度,我们不仅需要实现配额和权限控制,还希望提供可观测性指标以便于问题诊断。

  • 扩展性:对于大型模型未来规模的扩大或其他潜在变化尚属未知,故而扩展性成为我们考量中至关重要的因素。

  • 性能和成本:在当前的降本增效的大环境下,成本控制成为了一个关键因素。

  • 系统管理:我们希望多租户的文件系统能够实现权限和配额管理。作为一个支持多租户的文件系统,我们希望它能够有效地进行权限和配额管理。

技术挑战:多个云端并发访问

对于没有自建机房进行大模型训练的公司,依赖公有云的 GPU 资源成为必然选择。然而,单一公有云服务商往往无法提供充足的 GPU 配额,导致必须跨多个云平台分散 GPU 资源。在这种情况下,为了避免在不同云平台之间进行数据的重复拷贝,我们迫切需要一个能够在多个云环境中同时运行的文件系统。

理想的多云架构如下所示,能够实现数据的单一集群存储,跨多个云平台访问和处理。目前,知乎已经在使用四家公有云服务商的资源。

image.png

JuiceFS 相关调研

部署方式

在选型时,我们期望找到一种适合云原生部署的解决方案。在这方面,JuiceFS 展现出了领先的优势。同时,我们也考察了 JuiceFS 的一些竞争对手,发现基于容器存储接口(CSI)的部署方案尚未达到完善,而 JuiceFS 的实现相当不错。

image.png

系统可观测性

JuiceFS 提供了一个功能丰富的内部指标监控看板,使得查看系统性能变得十分便捷。社区版已包括若干关键的全局统计指标,如吞吐量、I\O 操作和延迟等。企业版提供了更细致的监控指标,能够对每个缓存服务和客户端的性能指标进行详细跟踪。这对于故障排除和性能监控尤其有价值。

image.png

image.png

02 多云混合部署存储架构设计

我们目前管理四个不同的云环境,每个都有自己的 Kubernetes 集群。我们的数据分为两部分:一部分存储在 HDFS 中;另一部分则由 JuiceFS 的元数据驱动和 S3 共同构成 JuiceFS 集群。

不同的集群能够通过网络访问 JuiceFS 和 HDFS。为了优化访问速度,我们将 JuiceFS 和 HDFS 部署在同一云环境中,实现内网访问,而其他云环境则通过专线访问。这一部署策略在云环境跨地理区域部署时,对性能有一定影响。例如,若前三个云部署于北方地区,如内蒙古或北京附近,性能通常较好。相反,如果第四个云部署在西南地区,可能导致更高的延迟。

image.png

集群面对两种主要需求:离线训练任务和配备交互式笔记本的任务。这些任务在 Kubernetes 环境中通过 JuiceFS CSI Driver 直接挂载,使得整个过程更为高效优雅。虽然 Alluxio 采用的是本地存储(Local Storage)方式,相对来说较为简单直接,但实际上仍然可行。关键在于容灾能力——需要保证物理机上的进程运行稳定,这是一个至关重要的考量。如果稳定性不佳,可能会导致服务不可用的情况发生。

image.png

HDFS 以存储样本数据为主,算法工程师和数据工程师一般在大数据平台上完成数据的处理和准备工作后,上传至 HDFS,Alluxio 负责管理这些 HDFS 数据。这部分数据在模型训练和交互式访问期间处于只读状态。

JuiceFS 则被用作保存 checkpoint 的输出目录,同时也为交互式 Notebook 提供统一的存储解决方案,包括 Notebook 中的临时内容,如模型下载、软件安装及编译结果等,都存储于 JuiceFS 中。由于 Notebook 具有状态,容器的任何故障重启都可能导致大量状态信息的丢失。通过挂载 JuiceFS,我们能够保留存储部分,这对于使用交互式应用的用户而言更为友好。

03 大语言模型训练的挑战

写 Checkpoint 卡住问题

我们的集群内同时运行着交互式任务、SFT\Alignment Job 和 Pretrain Job 等多种作业,这些作业生产 checkpoint 的数据量通常超过 100GB,有大规模模型加载的需求。初始时,我们采用 JuiceFS 社区版本应对这种大规模文件读写需求。但是,我们注意到在执行写操作期间,CPU 使用率急剧上升(如下图所示),最终导致集群变得不可用。这个问题使得团队成员在使用笔记本和执行其他任务时遭遇了严重的系统延迟,严重影响了整个集群的运行效率。

image.png

在深入排查集群性能问题时,我们发现 CPU 资源耗尽主要是因为使用的数据库引擎 Redis 的 CPU 资源被完全占用。同事在审查 Redis 的日志时注意到一个特殊的审计通知,该通知表示在文件检查完成之后会自动触发一次扫描操作。这个扫描会针对所有超过 6.4GB 的文件,不管是通过手动操作还是 API 调用设置的文件大小,均会启动此扫描。在 Redis 单线程模式运行下,这种扫描在 CPU 资源已经达到使用极限的情况下会阻塞其他所有请求。

稳定性问题复盘与解决方案

在排查系统卡顿原因的过程中,我们识别出系统延迟是由于 setattr 操作执行时间长达约 577 秒所致。通过审查 JuiceFS 的代码,我们注意到 JuiceFS 每项操作都伴随着相关信息的打印,这些信息帮助我们迅速定位到了问题操作及其大致耗时。然而,日志中存在一项小瑕疵:它仅展示了文件的 ID 而非路径。尽管这一点增加了问题解决的难度,但我们最终还是成功地确定了问题所在。

image.png

image.png

深入分析问题根源后,我们还研究了 PyTorch 的源代码。我们发现在 PyTorch 保存数据时,每个 Tensor 被作为一个记录增量存储至 zip_file 中。在这一增量写入过程中,会导致文件大小的修改,并触发文件的 truncate 操作。这种对文件大小进行重置的需求激活了之前的扫描操作,并导致它持续了相当长的时间。

image.png

同时,我们了解到 JuiceFS 会对文件拆分,一个文件首先被拆分成固定大小的 Chunk。每个 Chunk 可以由一个或者多个 Slice 组成,每个 Slice 的长度并不总是相同,这意味着无法简单地通过累加 Slice 长度来计算文件的总大小。因此,每当文件末尾添加或修改内容时,都需要重新计算文件的整体大小,这一过程涉及到遍历文件中的所有内容。

image.png

面对这一挑战,我们考虑了两种解决方案。

第一种是避免对大文件进行增量写入,不使用 PyTorch 的 save_checkpoint 接口,而是首先将数据写入本地文件,然后通过移动(move)操作将其传输到 JuiceFS 中,以此保证数据的连续性和完整性。

第二种解决方案是采用 JuiceFS 企业版来彻底解决这一问题。JuiceFS 企业版元数据引擎性能更优,能够更有效地管理大规模文件操作。

我们最终决定采用 JuiceFS 企业版。主要考虑是,我们无法完全避免潜在的问题,也不可能强制所有人都遵循避免增量写入 checkpoint 的规则。一方面,由于参与人员众多,实现全员一致行动较为困难;另一方面,社区代码不断迭代更新,我们的许多代码是基于开源项目的,用于后续的原型验证。在这种情况下,修改他人的代码并不是一种可行的长期策略。

JuiceFS 企业版元数据服务性能

关于元数据的性能,我们最关心的是其并行度是否具有可扩展性。下面这两张图分别显示了 JuiceFS 企业版 Rename 和 Delete 操作的性能,即事务处理速率(TPS)随并发线程数增加的变化情况。分别对比了 OSS 、HDFS 和 JuiceFS。

image.png

JuiceFS 在执行重命名操作时,随着并发线程数的增加,TPS 呈现出稳定的线性增长,远超 HDFS 和 OSS 。

image.png

JuiceFS 在执行删除操作时也表现出类似的趋势,其性能同样显著优于 HDFS 和 OSS。

基于这些数据,我们选择了 JuiceFS 企业版,因为它在处理并行操作时显示出优越的扩展性。尽管性能报告中未提供我们最为关心的 truncate 类型操作的数据,但从这些图表中我们可以推断,随着并发度的提高,JuiceFS 能够有效地扩展其事务处理能力,表现出比 Redis 社区版更强的性能,因此我们选择企业版来解决我们在 LLM 训练时遇到的性能问题。

04 PB 级数据跨云间数据迁移

随着对对 GPU 的需求量增加,我们也陆续引入了新的机房;同时由于主数据中心的变动,我们还需要将之前小型机房的存储迁移到更大的存储系统中。

社区版

迁移工作主要包括两个阶段:全量迁移和增量迁移。在全量迁移阶段,我们主要采用离线备份方法,即将 S3 中的数据迁移到新的存储系统中。在这个过程中,必须确保有专用的带宽,以防数据迁移过程中影响正常业务。

同时,我们还需要考虑两个云平台之间可能存在的带宽限制,因为这些限制可能影响到集群的整体稳定性。因此,必须提前确认可用的带宽情况。还要注意,S3 网关可能对账户、IP 或其他条件有所限制,这要求我们与相关方进行沟通,争取获得尽可能大的带宽限额以保障离线备份工作的顺利进行。以往的经验显示,大约 4PB 的数据需要一周时间来完成备份。

image.png

T0- T1 阶段

  • 旧集群:含有从 T0 到 T1 时段的所有数据以及原始数据。

  • 新集群:从 T0 时刻开始包含所有数据,但不包括该阶段增量数据和元数据。

  • 注意事项:考虑增量备份。离线备份过程可能因为几百 TB 数据量而耗时约一天,时间受限于 S3 网关可能的进出限制。

T1- T2- T3 阶段

  • 新集群:到 T1 时刻,新集群应更新至包含 T1 时刻的所有数据。随后的增量数据量相对较小,仅有一天的数据量,简化了迁移过程。

  • 注意事项:

  • 离线备份过程中,数据扫描是主要耗时环节,可能需数十小时处理 3.5PB 的数据,而非数据传输。因此,提高带宽对加速备份帮助不大。需要进行细粒度的迁移,并确保两边数据的一致性。

  • 中断文件的访问:这时需要摘掉存储并发送通知,告知所有用户暂时停止使用。然后开始进行元数据的拷贝以及从 T1 到 T2 的增量拷贝。根据我们的经验,200TB 数据可能需要数小时的时间来处理,直到 T3 时刻,整个集群才能满足需求。新旧集群是完全相同,恢复应用。

企业版

image.png

企业版的迁移过程与先前的方法相似,但显著的差别在于企业版的双写功能。在完成首次增量迁移后,需要利用这一功能来进行数据同步。此时,必须暂停所有文件访问,然后重新启动任务和笔记本,并配置双写设置。在双写阶段,系统仍将使用原有的存储,此操作对业务的影响仅限于几分钟。新存储将在 T3 时刻启用,我们完成这个过程大约用了两天时间。

接下来的步骤是切换双写中的组件,并把业务 Pod 节点指向新的集群。这个切换需要服务短暂中断,对业务的影响同样是分钟级别的。当到达 T4 时刻,过程将会很快,此时业务方已经开始使用新存储,完成对齐后需要关闭并重新配置双写功能。

我们发现增量迁移是迅速的,实际测试结果显示也仅需几分钟。这一增量迁移可以在启动作业和笔记本后进行,不会影响业务运行,但需要注意的是,在许多关键任务中,重新启动可能是不被接受的。因此,重新启动的时机通常不取决于迁移的完成情况,而是由业务方的工作中断能力决定。

尽管整体迁移时间没有缩短,但企业版的影响对业务运行的干扰更小。特别是在企业内部,如果操作影响到整个平台,那么企业版的优势会更加显著。

跨云间数据迁移注意要点

全量数据拷贝:需要考虑的关键因素包括数据拷贝的并行程度、公共网络带宽以及双方 S3 网关可能的流量限制。而在进行增量数据拷贝时,关注点在于离线任务的耗时,旨在一次性完成而无需重复执行。

增量数据拷贝:主要的时间消耗发生在对 S3 数据的扫描上,而不是数据的实际拷贝。如果能预先知道用户写入的具体目录,那么将大幅缩短增量拷贝所需的时间。此外,JuiceFS 的同步工具能够实现对指定文件目录的精确同步。

流程优化:最理想的做法是在网络断开后执行元数据的拷贝。我们在使用社区版进行同步的初次尝试中,并没有先行断网,结果在元数据同步后发现数据丢失的问题。JuiceFS 强调数据完整性,以元数据为准确依据。因此,在社区版中进行迁移时,我们必须确保在业务完全停止后才开始元数据同步。

社区版 JuiceFS 与企业版 JuiceFS 迁移方案对比:在执行文件系统的迁移过程中,我们同时对 JuiceFS 社区版和企业版进行了迁移操作。社区版分别采用了以 Redis 和 MySQL 作为元数据管理的两种配置。经过全面的比较后发现,社区版在迁移期间的影响业务时间较长,且迁移过程极易受到增量数据量的影响。

与此相反,企业版的迁移能够保持 JuiceFS 服务的持续可用性,尽管这要求业务方进行 3 次重启。正确选择重启时机是至关重要的,如果处理得当,对业务的影响可以降至最低。

05 小结

目前,知乎已在 JuiceFS 社区版上存储了 3.5PB 的数据,主要用于机器学习应用;针对那些对性能有更高要求的任务,如 LLM 训练的 Checkpoint 写入阶段,知乎采用了 JuiceFS 企业版。基于 JuiceFS 确保了跨多个公有云的数据操作的灵活性和高效性。JuiceFS 提供完全的 POSIX 兼容性,支持内部多样化的数据写入需求,性能方面能够实现实时交互的文件读写、与主流 Kubernetes 集群的无缝集成,并且提供了详尽的云应用文档及部署案例。

希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

相关文章:

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎,中文互联网领域领先的问答社区和原创内容平台,2011 年 1 月正式上线,月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法,数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…...

JWFD流程图转换为矩阵数据库的过程说明

在最开始设计流程图的时候,请务必先把开始节点和结束节点画到流程图上面,就是设计器面板的最开始两个按钮,先画开始点和结束点,再画中间的流程,然后保存,这样提交到矩阵数据库就不会出任何问题,…...

GT收发器第一篇_总体结构介绍

文章目录 前言GT收发器介绍 前言 之前写过一篇简单介绍GT的文章https://blog.csdn.net/m0_56222647/article/details/136730026,可以先通过这篇文章对整体进行简单了解一下。 GT收发器介绍 参考xilinx手册ug476 对于7系列的FPGA,共有3个系列&#xf…...

[图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示

文章目录 工程效果重要代码完整代码参考 工程效果 载入图片,并在左侧显示原始图片、二值化图片和灰度图片。 双击左侧的图片控件,可以在右侧的大控件中,显示双击的图片。 初始画面: 载入图片: 双击左侧的第二个控件…...

centos7.5 安装gitlab-ce (Omnibus)

一、安装前置依赖 # 安装基础依赖 $ sudo yum -y install policycoreutils openssh-server openssh-clients postfix# 启动 ssh 服务 & 设置为开机启动 $ sudo systemctl enable sshd & sudo systemctl start sshd二、安装gitlab rpm包 # 下载并执行社区版脚本 curl …...

深入理解MapReduce:从Map到Reduce的工作原理解析

当谈到分布式计算和大数据处理时,MapReduce是一个经典的范例。它是一种编程模型和处理框架,用于在大规模数据集上并行运行计算任务。MapReduce包含三个主要阶段:Map、Shuffle 和 Reduce。 ** Map 阶段 ** Map 阶段是 MapReduce 的第一步&am…...

初始Java篇(JavaSE基础语法)(5)(类和对象(上))

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客 目录 面向对象的初步认知 面向对象与面向过程的区别 类的定义和使用 类的定义格式 类的实例化 this引用 什么是this引用? this引用…...

机器人---人形机器人之技术方向

1 背景介绍 在前面的文章《行业杂谈---人形机器人的未来》中,笔者初步介绍了人形机器人的未来发展趋势。同智能汽车一样,它也会是未来机器人领域的一个重要分支。目前地球上最高智慧的结晶体就是人类,那么人形机器人的未来会有非常大的发展空…...

MySQL MHA高可用数据库

文章目录 MySQL MHA高可用数据库搭建MySQL MHA模拟故障故障修复: MySQL MHA高可用数据库 MHA(MySQL High Availability)是一个开源的高可用解决方案,用于实现MySQL主从复制集群的故障自动切换。MHA的主要目的是确保MySQL数据库集…...

LVS(Layout versus schematic)比的是什么?

概述 LVS不是一个简单地将版图与电路原理图进行比较的过程,它需要分两步完成。第一步“抽取”,第二步“比较”。首先根据LVS提取规则,EDA 工具从版图中抽取出版图所确定的网表文件;然后将抽取出的网表文件与电路网表文件进行比较…...

从0开始搭建基于VUE的前端项目(三) Vuex的使用与配置

准备与版本 vuex 3.6.2(https://v3.vuex.vuejs.org/zh/)概念 vuex是什么? 是用作 【状态管理】的 流程图如下 state 数据状态,成员是个对象 mapState 组件使用this.$store.state.xxx获取state里面的数据 getters 成员是个函数,方便获取state里面的数据,也可以加工数据 ma…...

python统计分析——双样本均值比较

参考资料:python统计分析【托马斯】 1、配对样本t检验 在进行两组数据之间的比较时,有两种情况必须区分开。在第一种情况中,同一对象在不同时候的两个记录值进行相互比较。例如,用学生们进入初中时的身高和他们一年后的身高&…...

三台电机的顺启逆停

1,开启按钮输入信号是 电机一开始启动,5秒回电机2启动 ,在5秒电机三启动 关闭按钮输入时电机3关闭 ,5秒后电机2关闭 最后电机一关闭 2,思路开启按钮按下接通电机1 并且接通定时器T0 定时器T0 到时候接通电机2 并且开…...

彩虹外链网盘界面UI美化版超级简洁好看

彩虹外链网盘,是一款PHP网盘与外链分享程序,支持所有格式文件的上传,可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码,还可支持文本、图片、音乐、视频在线预览,这…...

企业微信知识库:从了解到搭建的全流程

你是否也有这样的疑惑:为什么现在的企业都爱创建企业微信知识库?企业微信知识库到底有什么用?如果想要使用企业微信知识库企业应该如何创建?这就是我今天要探讨的问题,感兴趣的话一起往下看吧! | 为什么企业…...

【华为OD机试C++】合并表记录

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例1示例2代码描述 数据表记录包含表索引index和数值value(int范围的…...

uniapp中使用u-popup组件导致的弹框下面的页面可滑动现象

添加代码: touchmove.stop.prevent"()>{}"...

数字孪生|山海鲸可视化快速入门

哈喽,你好啊,我是雷工! 今天继续学习山海鲸可视化软件,以下为学习记录。 (一)新建项目 1.1、打开软件后,默认打开我的项目界面,初次打开需要注册,可以通过手机号快速注册。 点击“新建”按钮,新建一个项目。 1.2、根据项目需要选择一个快捷的项目模板,填写项目名称…...

C语言-malloc(申请函数)free(释放函数)

malloc和free的语法格式 malloc 函数是 C 语言标准库中的一个重要函数,用于动态分配内存。其语法如下: void *malloc(size_t size);这里的 void * 表示返回的是一个 void 类型的指针,实际上这个指针指向的是一个 char 类型的内存块。size_t …...

2024年150道高频Java面试题(十一)

21. 什么是 Java 中的内部类?它有哪些类型? Java 中的内部类是定义在另一个类内部的类。内部类能够访问其外部类的成员,包括那些声明为私有的成员。内部类是面向对象编程中的一个特色,可以用来逻辑上组织相关的类,并且…...

【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复,备份还可以测试应用,回滚数据,修改和查询历史数据,审计等 日志在备份、恢复中起着重要作用 一、数据库备份的重要性 在生产环境中,数据的安全性至关重要 任何数据丢失都可能产生严重的…...

os模块篇(三)

专栏目录 文章目录 专栏目录os.putenv(key, value, /)os.setegid(egid, /)os.seteuid(euid, /)os.setgid(gid, /)os.setgroups(groups, /)os.setns(fd, nstype0)os.setpgrp()os.setpgid(pid, pgrp, /)os.setpriority(which, who, priority) os.putenv(key, value, /) os.puten…...

kvm虚拟机迁移--来自gpt

离线迁移 离线迁移KVM虚拟机主要涉及将虚拟机完全关闭,然后移动虚拟机的磁盘文件和配置文件到新的宿主机上,并在新宿主机上启动虚拟机。下面是具体的步骤和命令: 步骤 1: 关闭虚拟机 首先,在源宿主机上关闭目标虚拟机。确保虚拟…...

用Typora+picgo+cloudflare+Telegraph-image的免费,无需服务器,无限空间的图床搭建(避坑指南)

用TyporapicgocloudflareTelegraph-image的免费,无需服务器,无限空间的图床搭建(避坑指南) 前提:有github何cloudflare (没有的话注册也很快) 首先,是一个别人写的详细的配置流程,傻瓜式教程&am…...

鸿蒙TypeScript开发入门学习第3天:【TS基础类型】

1、TypeScript 基础类型 TypeScript 包含的数据类型如下表: 注意: TypeScript 和 JavaScript 没有整数类型。 2、Any 类型 任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型,它常用于以下三种情况。 1、变量的值会动态改变时&…...

gitee 本地文件提交到仓库

一、准备工作 1.下载Git Bash Git Bash官网下载地址 http://www.git-scm.com/download/ 点此跳转 2.注册或登录gitee gitee官网地址 https://gitee.com/ 点此跳转 没有账号选择注册有账号的话直接登陆 3.在gitee中新建一个空的仓库 登陆成功后点进个人主页,点击…...

TemperatureTop-kTop-p

一、温度 在语言模型中使用温度(temperature)这个参数是为了控制文本生成过程中的随机性和可预测性。这个概念来自于统计力学中的温度概念,在那里它用来描述系统的熵(或随机性)水平。在语言模型中,输出概率…...

HTTP 协议中常用的两种请求方法:get请求与post请求

一、get请求 (1)什么是 GET 请求? GET 请求是一种向服务器请求获取资源的方式。它通过 URL 将请求参数附加到请求中,并将请求发送给服务器。GET 请求通常用于获取数据,例如读取文章、获取用户信息等操作。 在Node.j…...

飞天使-k8s知识点28-kubernetes散装知识点5-helm安装ingress

文章目录 安装helm添加仓库下载包配置创建命名空间安装 安装helm https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gztar -xf helm-v3.2.3-linux-amd64.tar.gzcd linux-amd64mv helm /usr/local/bin修改/etc/profile 文件,修改里面内容,然后重新启用export PATH$P…...

linux i2c-tools使用总结

1,安装iic-tools sudo apt install i2c-tools -y 2,查看有几条iic总线 [root@sino-platform:/root]# ls /dev/i2c- i2c-0 i2c-1 i2c-2 i2c-3 3,查看i2c命令 [root@sino-platform:/root]# i2c i2cdetect i2cdump i2cget i2cset 4,iic-help命令 [root@sino-platform…...

免费商标图案设计logo/百度seo公司哪家强一点

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼解N元一次方程从文件读入整数 N, 然后读入N*( N1)矩阵,得到解并输出到文件中。int main(){int ch;printf("\n");printf(" Gaussian Matrix Cal \n");printf("\n");printf("Choose:…...

做装饰画的行业网站/深圳推广公司有哪些

在一万英尺的天空一跃而下感受肾上腺素飙升带来的快感嗯没错,就是这种感觉如果跳伞是你人生TO DO LIST中的一个空白项,那就不要再犹豫了,将这项空白填充起来,就能够发现,在天空中的这段时间,将会是自己未来…...

医药企业网站建设/秒收录关键词代发

C语言中内存的管理主要是依据malloc和free实现的,其中malloc主要是实现内存的分配,而free则是实现内存的释放。虽然这是我们已经很熟悉的,但是还是存在一些问题。特别是当结构体中存在指针的情况下,各种问题也就会展现出来。 其中…...

无法访问服务器上网站/互联网广告公司

本文主要讲诉在使用VS2012SQL Server数据库做系统中,通常会遇到几个问题.使用dataGridView控件在修改、删除、插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会判断数据的主键是否存在或重复,判断外键是否重复,这几个问题我推荐使用函数的形式完成,同时推荐一…...

网站头部图片如何做/电子商务网站建设案例

众所周知,类的对象会随着程序的终止而被垃圾收集器销毁。如果要在不重新创建对象的情况下调用该类,该怎么做?这就可以通过序列化将数据转换为字节流。 对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中…...

在网站上做教育直播平台多少钱/淘特app推广代理

另外%f标识的数会被当成double读取,即取出8个字节读取。...