V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
daweii
V2EX  ›  问与答

ARM 主机的 Linux 和普通的 Linux 有什么区别吗(用途:跑 Jupyter Notebook 做数据分析)

  •  
  •   daweii · 2022-03-23 08:20:33 +08:00 · 4571 次点击
    这是一个创建于 955 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近从甲骨文那里薅了一台 ARM 的主机。想用来远程 Jupyter Notebook 。 这个可以直接像普通 Linux 一样使用吗?还是需要上 docker ?

    第 1 条附言  ·  2022-03-30 14:10:17 +08:00
    亲测有至今为止不能用的有两点。
    1. MKL (英特尔数学核心函数库) 我还以为 Anaconda 会自带这个包,结果 ARM 不支持。在安装贝叶斯统计库 PYMC 的时候提示出错。
    2. R 语言 4.0 版本,我只能安装到 3.0, 4.0 提示的话提示没有 R-core 依赖的两个包,具体哪两个忘了。
    如果还有其他的坑的话我会继续更新。

    另外说句题外话,甲骨文的 ARM 主机性能真是高。
    不愧是 4 核 24G 内存的主机。Unixbench 测得分数高达 3800 分。
    GCP 的免费 VM 只有 400 分不到。
    32 条回复    2022-03-23 17:59:15 +08:00
    villivateur
        1
    villivateur  
       2022-03-23 08:30:40 +08:00   ❤️ 1
    常用的软件都有 ARM 版,如果你的工作不涉及 CPU 底层的话,ARM 跟 x86 没有区别
    nevin47
        2
    nevin47  
       2022-03-23 09:01:24 +08:00   ❤️ 1
    如果只是数据分析,那基本感知不到太大的区别

    ARM 和 X86 服务器的差异越靠近上层越不明显
    nyfwan123
        3
    nyfwan123  
       2022-03-23 09:03:34 +08:00
    @daweii 楼主 怎么薅的啊?
    interim
        4
    interim  
       2022-03-23 09:05:11 +08:00
    一直信用卡通不过验证...
    e9pWeUbh9PGCnp95
        5
    e9pWeUbh9PGCnp95  
       2022-03-23 09:05:27 +08:00
    Do you know the memory order?
    nothingistrue
        6
    nothingistrue  
       2022-03-23 09:07:28 +08:00
    别的不知道,但是如果不一样的话,你不管是上 docker 还是上虚拟机都没用,跨架构的虚拟化,性能损耗非常大。
    iotbase
        7
    iotbase  
       2022-03-23 09:12:24 +08:00
    测试回复
    leimao
        8
    leimao  
       2022-03-23 09:13:28 +08:00 via iPhone   ❤️ 1
    @nyfwan123 甲骨文提供若干台 ARM 免费 instance
    nyfwan123
        9
    nyfwan123  
       2022-03-23 09:15:23 +08:00
    @leimao 感谢
    nevin47
        10
    nevin47  
       2022-03-23 09:16:34 +08:00
    @nothingistrue #6 ARM 的容器和 KVM 非常的成熟,不存在 ARM 模拟 X86 的这种用法。。。

    另外,docker 依赖容器技术,基本上和虚拟化是两码事儿
    nothingistrue
        11
    nothingistrue  
       2022-03-23 09:24:23 +08:00
    @nevin47 #10 不管是容器,还是分区,这都是在不改变 CPU 架构的情况下搞的。垮了 CPU 架构,因为指令集不同,必须要搞虚拟化或者指令模拟。跨架构虚拟化肯定损耗很大性能,指令模拟需要很大的投入成本,做得要不好还不如虚拟化。说个简单的例子,windows 下的 docker ,是要先用 hyper-v 搞个 linux 虚拟机的,这还只是跨系统没跨 CPU 架构。
    duke807
        12
    duke807  
       2022-03-23 09:28:21 +08:00 via Android
    linux 是跨架構最無痛的系統,沒有之一
    princelai
        13
    princelai  
       2022-03-23 09:32:35 +08:00
    跑都能跑,但是我说一个可能影响的因素,MKL,Jupyter Notebook 通常配合 numpy 和 pandas,甚至 numba,如果有 MKL 速度会快很多
    lithiumii
        14
    lithiumii  
       2022-03-23 09:32:46 +08:00 via Android
    远程 jupyter 没问题,大多数 python 库都能用,底层的依赖其实有区别但是开发者已经处理好了
    dawe
        15
    dawe  
       2022-03-23 09:57:51 +08:00 via iPhone
    @lithiumii 感谢。第一次听说 MKL ,刚搜了一下发现现在 Anaconda 都自带 MKL 了
    jessun1990
        16
    jessun1990  
       2022-03-23 10:03:10 +08:00   ❤️ 2
    我这里工作偶尔会有 arm 的环境,能感受到的区别就是:

    1. 同版本的 centos 的 arm 版和 x64 版中的 glibc 版本号可能会不一样,倒是部分二进制可能需要重新编译。
    2. 某些时候,同样的二进制可执行文件,在两个平台上要求的依赖有一些差异,不过 yum install 一下就好了。
    3. 华为云的 arm 环境下,编译 mysql 必须要遵循华为的官方文档的步骤。如果按照 mysql 文档走,一定会出现意外错误。例如: https://support.huaweicloud.com/prtg-kunpengdbs/kunpengmysql5727_02_0012.html
    dayeye2006199
        17
    dayeye2006199  
       2022-03-23 10:36:00 +08:00   ❤️ 1
    Numpy 底层也都是调用各种矩阵运算库来加速的,例如 blas lapack 。这些矩阵运算库为了性能,需要专门针对不同的 CPU 架构的指令集进行实现。所以 arm 架构需要专门编译这些底层库。

    这些库还有商用实现,例如 Intel mkl ,由于 intel 是专门卖 x86 处理器的,所以可想而知不会主动去支持 arm 。

    但一般用户使用可能不会接触这些细节,一些包管理软件例如 conda 已经可以很好的管理不同架构下的包,这些编译工作也已经有人做好了。
    3dwelcome
        18
    3dwelcome  
       2022-03-23 10:42:53 +08:00
    arm 适合小而美的 web 集群服务器。

    你拿它来做密集型计算和数据分析,估计有点悬。

    当然 x86 也未必行,现在科学计算都是 gpu 的天下了。
    nevin47
        19
    nevin47  
       2022-03-23 10:47:40 +08:00
    @nothingistrue #11 这位同学……你在说啥啊,你这说法感觉你根本就不懂 Hypervisor 和 Container 的基本原理和区别

    Windows 用 Docker 需要虚拟机,是因为 Docker 依赖 Linux Kernel 的 namespace 和 cgroup 啊😂Windows 自己又没有容器能力。另外

    我印象中,docker 是没有调用 VMX/EL2 的,这本身就是一个跑在 Kernel 之上的一个应用层,根本不需要翻译啥指令,现在 cgroup 本身就是一个 arch 不敏感的东西。

    我建议你如果想细致学习的话,可以读一下 cgroup v2 v3 两个 patch ,然后再看看 Intel 的 IA32/64 3C 卷的 VMX 章节,基本上就清楚容器技术和虚拟化技术的本质区别了……
    nevin47
        20
    nevin47  
       2022-03-23 10:55:14 +08:00
    @dayeye2006199 #17 我印象中 ARM 版本的 numpy ,是有用 ARMPL 做底层库编译了的,替代了 MKL 来编译 BLAS
    lovestudykid
        21
    lovestudykid  
       2022-03-23 11:04:41 +08:00
    不要依赖甲骨文这个机器,随时无通知删机
    nothingistrue
        22
    nothingistrue  
       2022-03-23 11:06:05 +08:00
    @nevin47 #19 我建议你还是先去仔细区分下 CPU 架构 /指令集,操作系统,虚拟化,容器化的区别。
    MaxTan
        23
    MaxTan  
       2022-03-23 11:06:08 +08:00
    @nevin47 #19 这里要杠一下,windows 还真有容器😅 跑的都是 windows 那一套东西。

    不过这东西不好用,也没什么人用,还不如用 hyper-v 套一层用 linux container
    nevin47
        24
    nevin47  
       2022-03-23 11:15:14 +08:00
    @nothingistrue #22 我拒绝和你继续交流,容器本身就是一个 Arch less 的东西,你非要把 arch sensitive 的 docker image 搅进来,你开心就好……而且绕回 OP 的最初需求,OP 的需求不需要上 Docker ,这个讨论本身就是和问题无关的无意义讨论
    jim9606
        25
    jim9606  
       2022-03-23 11:28:03 +08:00
    你没具体说分析用啥软件库。
    目前比较有可能有差别的是 numpy ,默认链接 openBLAS ,但 x86 还可以找到链接 intel mkl 的二进制包。
    不过应该没有性能以外的差距。
    ryd994
        26
    ryd994  
       2022-03-23 12:29:43 +08:00 via Android
    1. 可以,但是需要 arm 的软件包 /库。debian 官方源已经有很多软件了。其他一些软件需要你自己编译。另一些软件完全不支持 arm 。
    2. 不需要。你要用也可以用,但是需要 arm 的 image 。原因同上。
    libook
        27
    libook  
       2022-03-23 13:28:50 +08:00
    不知道具体是什么硬件,但主流 ARM 架构的计算机是受到了广泛支持的,大多主流应用程度应该都可以跑,只要确保你跑的是专门为 ARM 架构的计算机编译的程序,包括专门为 ARM 构建的 Docker 镜像。

    区别应该就是性能上,ARM 没有 x86 的部分复杂指令,也就是说某些计算用 x86 可以一个指令搞定,但是用 ARM 需要很多个指令组合才能完成,如果你的程序是对 x86 特有指令进行优化的,那么 ARM 计算机可能性能会稍差。
    w4087
        28
    w4087  
       2022-03-23 13:35:54 +08:00
    我的 mastercard 信用卡一直过不去,朋友中行 visa 双币的没啥问题,草了
    aneostart173
        29
    aneostart173  
       2022-03-23 15:22:50 +08:00
    主要看一些依赖库有没有 ARM 版本。尤其在高性能计算方面,arm 生态差一些。
    BrettD
        30
    BrettD  
       2022-03-23 16:04:51 +08:00
    @nothingistrue ARM 也有原生的 Docke 镜像……运行原生 Docker 不会涉及到跨指令集的问题
    BrettD
        31
    BrettD  
       2022-03-23 16:06:33 +08:00
    大部分开源软件在 Oracle Linux 上已经有打好的 ARM 二进制包,没有打包的话绝大部分软件从源码编译一下就能跑了,比较头痛的只有一些用到 x64 汇编的开源软件和不提供源码也不提供 ARM 二进制的闭源软件
    redsonic
        32
    redsonic  
       2022-03-23 17:59:15 +08:00
    要看是跑在什么 ARM 处理器上,国产的那一堆 ARM 折腾的够呛,IO 太孱弱。oracle 的 Ampere A1 不太了解。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 09:34 · PVG 17:34 · LAX 02:34 · JFK 05:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.