news 2026/11/4 11:11:18

CentOS 8上部署Ceph Octopus:从环境初始化到性能调优实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 8上部署Ceph Octopus:从环境初始化到性能调优实战

在这个全民上云、云原生泛滥的年代,反而有一批服务器被留在机房里,跑着并不算新的系统。我接手过一个类似运维环境,一水的CentOS 8服务器,业务侧明确要求自建分布式存储,给出的选型是Ceph,版本锁定Octopus(15.2.x)。说实话,初次听到这个组合时我也愣了一下:CentOS 8已经结束生命周期很久了,Octopus也不是最新版本。但当我放下“追新”的心态,把官方文档、社区Issue和实际部署过程走了一遍后,发现这套组合在存量硬件面前,反而呈现出一种难得的踏实。这篇文章就来讲讲我在CentOS 8上安装和配置Ceph Octopus的完整过程,包括环境规划、两种安装路线对比、存储池创建、踩坑记录和调优建议。无论你是要给老服务器续命,还是想在一套离线或不那么新的环境里快速搭出分布式存储,这篇应该都能给你省下不少时间。

我没有在一开始就直奔安装命令,而是先说清楚“为什么选它”,是因为Ceph的部署方式差异极大,如果没有搞清楚版本特性和系统约束,照搬网上的某些教程很容易在第一步就翻车。尤其CentOS 8停止维护后,yum源、驱动兼容、SELinux策略这些默认行为都发生了变化,提前花十分钟读环境,比事后排查十小时更划算。

1. 为什么还选CentOS 8 + Ceph Octopus这套组合

1.1 CentOS 8的生命周期与存量现实

CentOS 8的主流维护在2021年12月31日就正式结束了。按某些运维团队的习惯,系统EOL意味着寸草不生,安全补丁、CVE修复、软件仓库全部停更。但真实机房里的情况往往是:应用层还不能平滑迁移,硬件资源还没到报废年限,业务方对“稳定”的预期大于对“新鲜”的追求。这时候深陷“存量CentOS 8 + 分布式存储需求”的夹缝里,最务实的路径不是在裸金属上强行换新系统,而是在现有系统上把存储层做扎实。

这种选择是无奈的,但也是普遍存在的。Ceph官方在Octopus版本的官方文档中,仍然把CentOS 8列为支持的操作系统之一,这对我而言是一个关键信号:在系统生命周期的末尾,软件生态依然认可它作为承载层。另一方面,CentOS 8内部使用的内核版本是4.18,这个内核版本对大多数SATA盘、SSD、万兆网卡都有成熟的驱动支持,反而比某些过于超前的新内核在兼容性上更有优势。

1.2 Octopus版本的定位与选型理由

Ceph版本演进很快,但从稳定性和管理方式的维度看,Octopus(15.2.x)是最值得记住的版本之一。原因有三点:第一,Octopus开始把cephadm作为推荐的部署方式,一个二进制文件就能完成集群引导、主机管理和守护进程托管,这个变化让部署的复杂度大幅下降;第二,Octopus的Dashboard功能已经相当完整,可以直接在Web界面上看集群状态、管理OSD、查看性能指标,对不愿碰命令行的运维人员友好很多;第三,这个版本是LTS后续维护系列,社区修复了很多早期版本的崩溃和性能问题,在生产环境中的表现和数据安全记录都比较成熟。

我选择Octopus而不是更晚的版本,还有一个非常现实的原因:在CentOS 8这个系统层面上,Octopus的依赖链最为平顺。再往后的版本对Python版本和依赖库有更高要求,在CentOS 8默认软件源受限的情况下,手动凑依赖会变得很痛苦。

1.3 什么场景适合这套组合

如果你现在手里是以下几类环境,这套组合值得考虑:

  • 存量CentOS 8服务器,暂时无法迁移系统,但存储容量和可靠性都需要升级。
  • 离线或内网环境,软件源的更新需要走本地镜像,而Ceph Octopus的包比较全。
  • 测试环境或边缘节点,需要快速跑通一套包含对象存储、块存储、文件存储三种接口的分布式存储原型。

反过来,如果你后续有强烈的扩缩容需求、需要频繁升级版本体验新特性,那我建议换更新的系统与更新的Ceph版本。Octopus在CentOS 8上虽然稳定,但毕竟不是“永久保鲜”。

2. 安装前的环境规划与系统初始化

2.1 集群拓扑与硬件规划

Ceph集群的基本组件包括Monitor(负责维护集群映射)、Manager(负责性能指标和编排)、OSD(负责实际数据存储)。最小可用集群至少需要一个Monitor和一个Manager,但单机部署没有任何冗余意义。我在模拟项目X中使用的拓扑是三台服务器,每台同时运行Monitor、Manager和OSD,另外选其中一台作为部署管理节点。

关于硬件,有两条经验值得记住:第一,Ceph对内存的消耗没有想象中小,OSD进程每个会占用2-4GB内存,Monitor和Manager加起来再占几GB,因此每台机器建议至少16GB内存,如果OSD数量多,要往上加;第二,网卡是分布式存储的生命线。即使是测试环境,也建议至少两张千兆网卡做管理网络与存储网络分离,生产环境直接上万兆。网络不达标,后面出现的性能问题会让你误以为是硬盘的问题。

2.2 网络规划与端口说明

Ceph的端口规划并不复杂,但很多人会在防火墙规则里漏掉。默认情况下,Ceph的守护进程通信使用以下端口:

服务默认端口说明
Monitor3300, 6789客户端和MON通讯
Manager6800-7300内部组件通讯
OSD6800-7300数据访问和心跳
Dashboard8443Web管理界面
Prometheus metrics9283监控指标暴露

在CentOS 8上,我通常的做法是直接关闭firewalld服务来解决通信问题,毕竟内网环境,安全策略由上层防火墙统一控制。如果因为合规要求必须开启firewalld,那就需要把这些端口按节点角色放通。这里补充一句:不要在部署过程中反复调试防火墙规则,成本太高。

2.3 系统初始化的关键操作

在安装Ceph之前,每一台节点都要完成以下几项初始化,缺一个都可能埋雷。

首先是配置DNS或/etc/hosts解析。Ceph集群中节点标识靠主机名,IP解析错误会直接导致Mon选举失败。我在三台机器上分别配置了完整的主机名和IP映射,顺序是IP在前、完整域名在中、短主机名在后。

然后是时间同步。Ceph对时间偏移非常敏感,Monitor之间时钟偏移超过一定阈值就会影响选举。CentOS 8自带了chrony,只需修改/etc/chrony.conf里的server指向一个内网NTP服务器,然后执行systemctl restart chronyd && systemctl enable chronyd。

还有一个容易被忽略的点:关闭SELinux或者调成宽容模式。严格讲,生产的理想状态是让SELinux和Ceph共存,但Octopus在CentOS 8上配置SELinux策略并非一两句话能搞定,涉及SELinux布尔值和文件标签的修改。我统一使用setenforce 0并把/etc/selinux/config里的SELINUX改为permissive,换来部署速度,同时保证能及时发现其他问题。

2.4 CentOS 8的yum源问题

这是今天的第一个大坑,务必先解决。CentOS 8停止维护后,系统默认的AppStream和BaseOS软件源链接全部失效,哪怕你以为网络没问题,yum install也会直接报错。解决办法是把源指向CentOS Stream的vault镜像源,或者用国内可访问的龙蜥镜像。

我用个简单方案,把/etc/yum.repos.d目录下的所有CentOS-*.repo文件的baseurl全部替换为vault镜像地址,并且将enabled=1的项改过来。替换时注意mirrorlist参数要注释掉,只保留baseurl,否则会覆盖你的配置。替换后执行dnf clean all && dnf makecache验证源可用。

实践中的确有很多人在这一步就放弃,因为提示“Could not resolve mirrorlist”完全看不出是源失效还是网络故障,但只要把yum源切到vault上,这个问题立刻消失。

3. 两种安装路线:cephadm与手动rpm方式

3.1 方案对比

Octopus版本提供两条部署路线,我在这里把优缺点放在一张表里:

安装方式优点缺点适合场景
cephadm一条命令引导集群;自动化管理守护进程容器;后续扩容方便依赖容器运行时,出问题排查要懂容器;离线环境需要提前准备镜像有容器环境的现代化部署
手动rpm直接使用系统包管理器;进程生命周期由systemd管理,直观;不依赖容器配置步骤繁琐;服务扩容需要手动执行多步习惯传统运维、内网无容器环境

我当时在离线内网环境,容器镜像的获取非常不顺,于是最终选择了手动rpm方式。但如果你的环境能正常访问外网,或者能提前把镜像拉到本地,cephadm是最省力的。两种方式我都在测试环境跑通过,下面分别记录。

3.2 cephadm方式安装步骤

cephadm本质上是一个基于容器技术的管理工具,部署端只要求Python 3.6+和一套容器运行时(Podman或Docker)。在CentOS 8上首先要确认Podman可用,因为默认的container-tools模块自带Podman。如果系统中没有,执行dnf install -y container-tools即可。

然后下载cephadm脚本。这个脚本可以放在/usr/local/bin下并赋可执行权限。完成后在部署节点上执行引导命令,其中关键点是mon-ip参数必须填写部署节点在集群网络中的IP,ssh-user填写当前系统用户;Ceph会用这个用户通过SSH免密方式在其他节点上执行操作。

bootstrap引导完成后,cephadm会在当前节点上启动一个Monitor和一个Manager,同时会生成一个client.admin配置文件和keyring放在/etc/ceph目录下。接着做SSH免密,把整个集群纳入管理,再将其他节点上的OSD添加进来。整个过程对容器的依赖很强,如果Podman版本过低,可能会有权限问题,出现这种情况时优先升级container-tools。

3.3 手动rpm方式安装步骤

手动rpm方式是传统方式,全程不涉及容器,适合内网环境。第一步是安装Ceph官方的yum源,我以Octopus版为例,在拿到repo源文件后需要把gpgcheck根据实际密钥情况选择开启或关闭。内网环境如果没有导入GPG密钥,安装时会有告警,我的建议是把密钥文件也一并放到内网,或者直接临时设置gpgcheck=0,因为集群内部基本不需要操心被篡改的问题。

每个节点上执行:

yum install -y ceph-mon ceph-mgr ceph-osd ceph-mds ceph-radosgw

这套包安装完成之后,Ceph的二进制文件、RPM默认配置、systemd服务文件都会就位。然后开始手动初始化Monitor:

mkdir -p /etc/ceph # 在部署节点生成初始密钥 ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' # 生成管理员keyring ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'

再创建ceph.conf配置文件,指定cluster网络、public网络、mon主机名和初始mon成员。这个步骤最容易出错的就是配置路径或fsid不一致,注意mon keyring中记录的fsid必须和ceph.conf中的fsid一致。接着启动mon进程,并把mon加入集群后,再启动mgr和osd。手动方式的每一步都有对应的验证命令,建议每执行一步就用ceph -s观察一下集群状态,而不是一口气把所有组件配完再回头看,那样定位问题会非常困难。

4. 集群初始化、OSD创建与Dashboard配置

4.1 通过cephadm初始化单节点集群

如果选cephadm方式,初始化命令如下:

cephadm bootstrap --mon-ip 192.168.10.10 --ssh-user root --cluster-network 192.168.20.0/24

这段命令的意思是:当前节点作为Monitor,IP是管理网络地址;存储网络单独走192.168.20.0/24网段。执行完成后,ceph -s应该可以看到集群状态为HEALTH_OK或存在一些还未完成的告警。首次引导时,集群里只有Monitor的OSD还没有,所以会提示OSD数量不够,这个正常。

拿到bootstrap后可以追加节点,先在别的节点上配置SSH免密,然后通过ceph orch host add命令把节点纳入集群。在Octopus里,OSD的创建可以走ceph orch device zap或者ceph orch daemon add osd这组命令。注意,这里Ceph会自动检测未使用的块设备并部署OSD,也可以手动指定盘符。

4.2 扩容OSD的完整过程

我以手动rpm方式为例说一下追加OSD的正确姿势。OSD的数据存储基于Bluestore,一块磁盘会分三层:数据实际存放的block、存放元数据的WAL(block.wal)和数据库(block.db)。最稳妥的分配方式是block独占整块盘,block.wal和block.db优先放到SSD或NVMe盘上。如果条件允许,最好单独准备一块小容量SSD专门做OSD的WAL和DB,能明显提升随机写性能。

手动创建一个OSD的命令是:

ceph-volume lvm zap /dev/sdb --destroy ceph-volume lvm create --bluestore --data /dev/sdb

这里第二条命令会把整块磁盘做成数据盘,WAL和DB默认和数据盘放在一起。如果想指定SSD作为WAL和DB,需要分区后手动指定:

ceph-volume lvm create --bluestore --data /dev/sdb --block.wal /dev/sdc1 --block.db /dev/sdc1

创建OSD后,一定要观察ceph -s里的PG状态。如果出现PG在peering或degraded,说明副本还没有完全同步,切成更安静的复制等待即可。这个阶段最忌频繁重启OSD或拔盘,容易把重建过程拖成高负载。

4.3 配置Dashboard和监控

Octopus的Dashboard是很多人选择它的一大原因。开启Dashboard非常简单:

ceph mgr module enable dashboard ceph dashboard create-self-signed-cert ceph dashboard set-login-credentials admin 'your-password'

然后Web访问 https://ip:8443 就能看到图形化面板。Dashboard能直接展示集群使用率、OSD延迟、客户端吞吐量,还可以通过内置的Prometheus模块把指标暴露给外部监控。

有个细节要注意:dashboard模块是通过Manager进程提供的,而Manager负责资源调度的角色。如果Manager发生故障切换,Dashboard的URL可能从一台机器跳到另一台机器,所以生产环境最好用一个虚拟IP来代理8443端口,或者把它放在负载均衡后面。

5. 存储池、块设备与客户端实战

5.1 创建存储池

Ceph存储池(Pool)是数据承载的基本单位。在Octopus中,创建池之前需要考虑副本数(size)、PG数量(pg_num)和复制模式。默认副本数是3,数据写一份,另外两份副本写到其他两个OSD上,这种方式安全性高但空间占用大。测试环境可以改成2来节约空间,但生产绝对不值得在副本上省钱。

PG数量估算取决于OSD总数和每个OSD承载的PG数。经验公式大致是:PG总数约等于(OSD总数 × 100)除以副本数。比如10个OSD,副本3,PG总数建议在330左右,然后按最接近的2的幂次来选择pg_num,比如256。

创建命令:

ceph osd pool create mypool 256 256 replicated

第三个参数是副本数量,如果使用纠删码(EC)池可以改成ec模式,但这个在手动配置时需要额外创建profile,建议新手先从副本池开始。

5.2 RBD块设备的使用全流程

RBD(RADOS Block Device)是Ceph最常用的块存储接口。创建并挂载一块虚拟盘的完整流程如下。

先创建块设备镜像:

rbd create mypool/disk-image --size 20G

把镜像映射到本地设备节点:

rbd map mypool/disk-image --name client.admin

首次映射会在/dev下生成一个rbd设备。如果需要开机自动挂载或者让多客户端访问,需要启用rbd kernel模块并配置好ceph客户端关键信息。我通常在内网客户端上用iptables限制访问,再用以下方式挂载:

mkfs.ext4 /dev/rbd0 mount /dev/rbd0 /mnt/ceph-disk

这个过程对小白来说会有个理解拐点:Ceph块设备不是本地文件,而是一个分布在不同服务器上的逻辑卷,你在客户端看到的/dev/rbd设备其实是由内核网络驱动抽象出来的,所以单机层面看延迟会比本地盘高。若想追求更低的延迟,需要调优前面提到的网卡参数、队列深度以及客户端端的max_sectors_kb。

5.3 CephFS集群配置(可选)

如果需要文件存储,配置CephFS也不复杂。首先生成两个存储池,一个负责元数据,一个负责数据:

ceph osd pool create cephfs_metadata 64 64 ceph osd pool create cephfs_data 128 128 ceph fs new cephfs cephfs_metadata cephfs_data

启用MDS守护进程后,在客户端挂载:

mount -t ceph 192.168.10.10:/ /mnt/cephfs -o name=admin

CephFS比较适合存储海量小文件的场景吗?从我的实践看并不绝对,它在千万级文件数量下还是能保持一个可接受的性能。But如果你是小文件高并发写入,CephFS未必比本地文件系统好,这是分布式架构的通病,如果业务对密金属敏感,要提前打预防针。

6. 最容易出问题的七个坑

6.1 yum源失效导致连锁故障

前面提到的CentOS 8仓库失效问题会在两种情况下爆发:第一是在全新安装时,系统包管理器无法拉取任何依赖;第二是中途需要安装某个额外工具时,才发现源已经失效。解决办法就是把软件源换成vault,这在2.4节已经说过。一定要在开始装系统时就把源修正,不要等装到一半再处理,否则卸载重来的成本更高。

6.2 时间同步漂移

Ceph的Monitor对时间非常敏感,如果三台节点之间时间差超过0.5秒,集群可能会出现间歇性告警。我遇到过一次非常诡异的现象:ceph -s状态一直显示HEALTH_WARN,但点开详情只提示clock skew detected。排查了半小时才发现其中一台机器的chrony服务没有随开机启动,时间落后了整整一天。统一写一个定时任务检查chronyc tracking结果,能避免绝大多数这类问题。

6.3 SELinux和权限问题

CentOS 8默认SELinux为enforcing,Ceph在运行时需要访问磁盘设备、pid目录、socket文件,SELinux的安全上下文如果不对,OSD启动日志里全是Permission denied。如果采用permissive模式则不会有这类问题。但有人担心permissive模式降低安全性,我在实际部署中采用的折中方案是:先以permissive跑通全流程,确认集群稳定后,有精力再细化SELinux策略。

6.4 主机名解析

有三台节点时,一个疏忽是把/etc/hosts只写了本机IP和hostname,没写其他两个节点。看似每台机器信息都完整,但Ceph内部使用的是短主机名加域名的方式探测其他节点,最终会导致OSD心跳通信失败、Mon无法连接。写/etc/hosts时务必三台机器的IP和主机名全量写入。

6.5 Bluestore的块设备分配

这是一条非常典型的教训。我在起初把WAL和DB在同一个数据盘上,没有单独分离,结果在重负载写入测试中,随机写性能经常掉到令人发指的程度。后来通过ceph osd blocklist和OSD迁移把WAL和DB挪到SSD分区上,性能才有了质的提升。规划磁盘时建议不要让数据和WAL/DB打架,哪怕拿一块几百GB的SSD做全集群的WAL+DB分区,也比混着用好得多。

6.6 网络参数导致的OSD抖动

Ceph的OSD进程通过心跳相互检测,如果存储网络的ping延迟波动很大,OSD可能被误判为down,然后触发数据恢复。这个现象在千兆网络、网卡负载高的时候很常见。解决方法是先把网卡的tuned-adm配置为latency-performance或network-latency,其次检查MTU是否一致,万一出现混用,跨网段MTU不一致会造成分片丢包。用ethtool -S查看drop、error计数也是快速判断网卡故障的一个方法。

6.7 升级和重启后的集群状态

CentOS 8环境下,如果内核升级或重启服务器,Ceph守护进程会自动拉起,但有时你会发现重启后OSD没有自动上线,特别是手动rpm方式安装时,systemd的enable配置被遗漏。我的习惯是每个节点都执行systemctl enable ceph.target,并在开机后第一时间ceph -s检查状态,而不是等业务报警后才去看。

7. 上线前的性能调优与运维习惯

7.1 内核参数

Ceph对内核参数有几项默认值并不友好。比如系统swap倾向、脏数据回写比例、文件句柄数,都要做针对性调整。

# 提高内存敏感业务的稳定性 vm.swappiness=10 vm.dirty_ratio=20 vm.dirty_background_ratio=5

另外,Ceph的OSD进程会消耗大量文件描述符,把limits里的nofile调大到65535或更大。网卡队列方面,如果使用多队列网卡,加载RSS队列并把每个队列绑定到不同CPU核心,中断处理更均衡。默认的irqbalance大概率不够,必要时手动设置。

7.2 OSD关键参数

Octopus的OSD有几个重要配置项值得关注:

参数推荐值说明
osd_memory_target4G或更高OSD缓存目标,太低会导致性能下降
osd_max_objects自动单OSD对象数上限,不建议手动改
bluestore_cache_size_hint自动/手动可以给热点池增加缓存
osd_scrub_during_peakfalse避免高峰期间进行数据校验

如果OSD数量多,内存吃紧,不要盲目调大osd_memory_target,应根据总内存和OSD数量平衡。每个OSD 4G是一个典型配置,16GB内存的机器建议最多放3个OSD。

7.3 日常运维建议

运维Ceph Octopus集群,我最想强调的一点是“不要让存储集群处于不可观测状态”。Octopus自带的Dashboard和Prometheus已经提供了很多数据,至少要配置一个告警规则,比如OSD down超过一个副本、PG数异常、容量超过阈值,这些应该第一时间让值班人知道。

另外是数据备份。Ceph本身是多副本存储,能防单盘故障,但它不能防误删除或者勒索软件。如果有业务需要,还要额外考虑快照、RGW版本控制或定期导出。不要因为分布式存储的可靠性就忽略数据安全的其他维度。

还有一点是版本策略。Octopus在CentOS 8上虽然稳定,但涉及重大安全更新时,还是要关注官方公告,评估灰度升级。不要因为EOL就觉得什么都不用管,存储系统永远是越谨慎越好。

最后分享一个我踩过几次坑后的个人习惯:每次对Ceph做变更(新增OSD、调整池参数、升级系统)前,我都会先记录下ceph -s的输出、ceph osd tree、ceph df,并且把/var/log/ceph目录做一个归档。这些信息在出现问题时是定位和回滚的宝贵线索。养成这样的习惯后,绝大多数存储故障都能在一个可接受的窗口期里解决。

如果你也在部署CentOS 8 + Ceph Octopus,欢迎参考这篇教程,但更重要的是根据你的环境条件做取舍。存储没有银弹,只有贴合现状的方案,才是最实用的方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 15:11:00

培养孩子心理健康的6大类35项核心能力

1. 引言:重新定义孩子的心理健康在育儿这条路上,我见过太多家长陷入一个误区——认为孩子只要不哭不闹、性格开朗就是心理健康。直到我自己在儿童心理咨询领域深耕十年后才发现,真正的心理健康远比表面现象复杂得多。它更像是一套完整的操作系…

作者头像 李华
网站建设 2026/10/28 7:11:10

工业仿真自动化实战:AI Agent与MCP协议全解析

我接过不少这种需求:“帮我大概看一下这段管路压降合不合理,流量按5万吨/天来算,介质就是水,常温,出口背压别低于3公斤,结果最好直接能放进报告里。” 一句话的事,但真要把这句话变成一场能跑、…

作者头像 李华
网站建设 2026/10/28 9:27:24

多维信号传输:突破带宽效率瓶颈的工程实践指南

1. 项目概述:为什么“多维信号传输”是数字通信的分水岭“数字通信第三章——多维信号传输”这个标题,乍看像教科书里一个平平无奇的章节名,但如果你在通信系统设计、无线链路优化或高速数据接口开发一线干过几年,就会明白——这一…

作者头像 李华
网站建设 2026/10/28 5:35:49

操作系统经典同步问题:从信号量到工程实践的并发控制指南

如果你的工作里写过任何多线程程序,那你大概率遇到过这种情况:数据莫名其妙错乱、程序偶尔卡死、压测一上来日志就乱套。我在某公司做服务端开发的那几年,代码评审里最常见的争议,就是“这个共享变量加锁没有”“这两个锁的顺序对…

作者头像 李华
网站建设 2026/10/31 6:23:49

基于SpringBoot的分布式文件系统:从分片上传到秒传实现解析

最近在开源社区闲逛,看到个项目标题很有意思:“对标百度网盘:基于SpringBoot开发的分布式文件系统”。一开始我心想又是那种简历项目,代码没多少,吹牛占一半。但clone下来跑了一圈之后,我得承认&#xff0c…

作者头像 李华
网站建设 2026/10/31 11:37:30

MindSpore+ModelArts+昇腾芯片:国产AI全栈开发链路详解

这两年,国产深度学习工具链的关注度一路走高。很多团队问的最多的不是“要不要用MindSpore”,而是“MindSpore、ModelArts和昇腾芯片到底是怎么配合的,我现在能不能上手”。这三个名字经常被同时提起,但很多人对它们的边界和咬合关…

作者头像 李华