关于 Docker 的内存恢复问题,求问,在线等 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ggp1ot2
V2EX    程序员

关于 Docker 的内存恢复问题,求问,在线等

  •  
  •   ggp1ot2 2024-07-08 19:21:43 +08:00 1765 次点击
    这是一个创建于 467 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    设备是 mbp m3 16G 内存的。

    因为 m 芯片并不好安装 xgboost 等库,经过一番搜索了解到可以使用 Docker

    通过摸索构建了一个基于 Python 的镜像(包含 xgb 等机器学习库)

    但是在训练模型的时候,经常报错,表现为 notebook 崩溃需要重来,或者是 python 脚本 killed

    相关设置

    经过进一步搜索,发现可能和内存、cpu 有关。

    我在创建容器的时候,并没有指定一些 cpu 、内存的参数,在 desktop 中已经将相关设置拉满了

    "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": [], "BlkioDeviceWriteBps": [], "BlkioDeviceReadIOps": [], "BlkioDeviceWriteIOps": [], "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, 

    docker

    https://imgur.com/a/oKDBMmh.jpg

    理论上这不就是可以随意使用 mbp 的内存和 cpu 了?

    进一步发现

    进一步在重现问的时候,使用 docker stats 发现,在数据读取和处理的时候,

    1 、cpu 和 内存使用都会涨,在数据读取完之后,cpu 立刻 0%,但是 mem usage 没有变化,还是 10G 左右,继续执行代码,马上就崩溃了,为啥内存不会恢复?

    2 、即使没有限制使用 cpu 核心数,但是数据处理的时候, 容器的 cpu 占比可能 200%,但是电脑还是有 50% 的 cpu 剩余,为啥用不满?

    3 、在建模的时候,容器的 cpu 可以飙升到 600%,但是内存使用居然没有用满?

    疑问

    实在是不怎么使用 docker ,总是感觉是不是容器不能很好的利用 mbp 的资源,理论上是比较好的设备了,居然跑个 xgb 跑不动

    还是是我的数据量太大了吗?(差不多 15w 行 x 1000 列)

    13 条回复    2024-07-08 21:05:35 +08:00
    ysc3839
        1
    ysc3839  
       2024-07-08 19:25:29 +08:00 via Android
    不如直接用虚拟机
    javazero
        2
    javazero  
       2024-07-08 19:25:44 +08:00
    建议上 Kaggle
    ggp1ot2
        3
    ggp1ot2  
    OP
       2024-07-08 19:27:09 +08:00
    @javazero 公司的数据,肯定不能放在第三方平台

    @ysc3839 mac 还能开虚拟机?和 docker 有啥区别呢?
    ysc3839
        4
    ysc3839  
       2024-07-08 19:28:50 +08:00 via Android
    @ggp1ot2 为什么不可以? Docker 也是用虚拟机跑的。
    ggp1ot2
        5
    ggp1ot2  
    OP
       2024-07-08 19:30:35 +08:00
    @ysc3839 搜了下,你说的开虚拟机,是开个 Windows ?
    ysc3839
        6
    ysc3839  
       2024-07-08 19:33:51 +08:00 via Android
    @ggp1ot2 那当然是 Linux 虚拟机,Docker 里面跑的也是 Linux 镜像
    ConfusedBiscuit
        7
    ConfusedBiscuit  
       2024-07-08 20:05:39 +08:00   1
    我来详细解释一下:
    1. Docker 上流行的容器其实都是 Linux 容器(理论上也支持 Windows 容器,但是没见有人用过),这种容器在 Windows 和 Mac 上其实都是自动起了一个 Linux 虚拟机( Windows 上基于 WSL2 的也是虚拟机),然后在虚拟机里运行 Docker 。
    2. 基本认同 @ysc3839 的方案,我也采用自己跑个 Linux 虚拟机的方案,但是本质上区别不大。
    3. 关于内存问题,如果指的是整个 Docker 的内存占用(其实就是虚拟机的内存占用)确实有可能没法立马恢复(这要看他虚拟机的具体设计,我确实不太了解)。mac 上 Docker 这种实质上在虚拟机里跑的方案,天生就注定了不太适合做需要很高性能的事情。
    4. xgboost 我确实没研究过,但是经常报错可能有以下可能:
    ( 1 )内存不够,被 Linux 的 OOM kill ,我觉得最大的可能是这个(不可能占满 16G 的,你的 Mac 系统自身就占了不少)
    ( 2 ) arm 适配不足,可能适配了,但没完全适配,导致某些情况会报错

    总结:
    1. 用 arm 的 mac 做这个事情确实不太合适(兼容性、性价比)
    2. 性价比最高的可能是搞个 Linux 机器,退而求其次 Windows+WSL2 的方案也不错,我就试过在 WSL2+Docker 的环境调用 CUDA ,效果不错
    ConfusedBiscuit
        8
    ConfusedBiscuit  
       2024-07-08 20:08:41 +08:00
    补充一下,我尝试 WSL2+Docker 的环境调用 CUDA 的时候,也有内存问题,但是由于我机器 64G 内存,跑模型的时候 WSL2 最高占用过 32G 。所以 OP 可以试着换 64G 内存的 mac 试试,16G 再套个虚拟机确实是有点儿不够。
    superchijinpeng
        9
    superchijinpeng  
       2024-07-08 20:22:07 +08:00
    orbstack
    yinmin
        10
    yinmin  
       2024-07-08 20:58:25 +08:00
    mac 跑 docker 和 linux 跑 docker 不一样。linux 跑 docker 是进程级别的隔离,默认可以用 linux 所有内存和 CPU ; mac 跑 docker 是用虚拟机,默认好像是分配 2GB 内存。

    你到 docker - preferences - resources 里看看是否可以调整内存量。
    ggp1ot2
        11
    ggp1ot2  
    OP
       2024-07-08 21:01:03 +08:00
    @ConfusedBiscuit 非常感谢,我本以为,开虚拟机就需要 VMware 等软件,可能会更耗内存

    其次,我使用 docker 的原因是经常需要切换 python 和相关包的版本,可以通过 dockerfile 来控制,方便和同事交接

    看来确实可能是 16G 的内存的问题,因为切小数据集就可以跑动的了,本以为最新的 mbp 即使内存 16G 也很能打

    可能确实用 mac 做算法,不是一件高性价比的事情

    再次感谢
    yinmin
        12
    yinmin  
       2024-07-08 21:04:55 +08:00
    docker - preferences - resources 的内存不能拉满的,建议改成 8GB 、10GB 、12GB 依次试试是否有改善。
    cctv6
        13
    cctv6  
       2024-07-08 21:05:35 +08:00
    记得 macos 版本的 docker 是可以设置 vm 虚拟机的内存大小的,可以看看设置里面
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2619 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 13:13 PVG 21:13 LAX 06:13 JFK 09:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86