V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dayeye2006199
V2EX  ›  程序员

AI 热下被忽视的编程语言

  •  
  •   dayeye2006199 · 2023-05-02 06:20:45 +08:00 · 8157 次点击
    这是一个创建于 562 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近观察 AI 热下的一些项目使用的编程语言趋势。 第一大语言不用说自然是 python ,langchain, autogpt 之流都是 python 写的。 还有一大类就是 c++,几个模型推理的硬核项目

    自己有时候进去这些 repo 想看看是怎么弄的,无奈和个傻子似的看不懂 C++,也不太熟悉工具链,想要从头编译,直挠头。

    这波 AI 潮下,会 C++我觉得算是一个优势

    43 条回复    2023-05-08 09:45:27 +08:00
    levelworm
        1
    levelworm  
       2023-05-02 07:19:53 +08:00 via Android   ❤️ 2
    C/C++这种偏底层的语言,还是需要懂其他的 domain knowledge 才有真正的价值。
    Alias4ck
        2
    Alias4ck  
       2023-05-02 09:31:39 +08:00
    其实 pytorch 本身 就有一大半是 c++写的 只不过你没关注到而已
    LeeReamond
        3
    LeeReamond  
       2023-05-02 11:08:15 +08:00
    没什么意义,毕竟你不太可能通过给框架内核贡献代码获得收入,更不太可能重复实现内核,另外现在都 2023 了如果要贴近底层,新项目 rust 优先级肯定更高。
    user667788
        4
    user667788  
       2023-05-02 11:18:12 +08:00
    好奇 他们为什么不用 rust , 或者用其他更现代的语言,c++给我的感觉是个老古董
    L4Linux
        5
    L4Linux  
       2023-05-02 11:42:06 +08:00   ❤️ 3
    @user667788 不追求 memory safety 而强行用 Rust 难道不是自讨苦吃?
    duke807
        6
    duke807  
       2023-05-02 11:48:33 +08:00 via Android
    @user667788
    rust 开发时间要加倍,问问市场同不同意
    chesha1
        7
    chesha1  
       2023-05-02 12:39:48 +08:00
    你举的两个例子,最初都是用 python 开发的,其实深度学习项目想部署,确实大概率要转成 c++,会 c++算是必备技能吧。就看你做什么层级的工作了,如果是纯做算法的工作不需要懂 c++,如果底层点,偏工程一点的岗位不可能不会的

    c++其实一直没有被忽视的,就算是深度学习这个领域也是,最主流的框架用 python 调用,但是框架底层不少还是用 c++写的
    chesha1
        8
    chesha1  
       2023-05-02 12:47:13 +08:00
    @user667788 我个人的理解是这样,不一定对:
    1. c++市场供应更大,找个同水平的 rust 程序员花费更高,尤其是在高性能领域
    2. 深度学习需要调用 cuda 和很多其他运算的库,似乎只能用 c++来做,至少 c++是主流
    3. c++新标准用了之后不算太老,c++20 ,23 有各种新东西,协程, module 之类的都挺好的
    uni
        9
    uni  
       2023-05-02 13:13:27 +08:00   ❤️ 1
    气抖冷,什么时候 rust 才能干翻 c++(引完战就逃((
    jones2000
        10
    jones2000  
       2023-05-02 13:17:19 +08:00
    c++门槛高, 没有 4-5 年上不了手。转行赚快钱的基本不会选 c++. 选 c++后面的路是越走越宽。
    dayeye2006199
        11
    dayeye2006199  
    OP
       2023-05-02 13:26:00 +08:00 via Android
    我现在在研究怎么把一些 CPP 写得科学计算库移植到 wasm 里,发觉工具链这块是一抹黑,cmake ,编译器这块是一点都不熟
    ck65
        12
    ck65  
       2023-05-02 13:29:06 +08:00
    Rust 在 LLM 这波屁都不敢放一个(不是我说的
    crackidz
        13
    crackidz  
       2023-05-02 13:45:43 +08:00
    ck65
        14
    ck65  
       2023-05-02 13:47:59 +08:00
    @crackidz fuiyoh 总算写了个 api caller project (
    talkischeap567
        15
    talkischeap567  
       2023-05-02 14:04:21 +08:00
    intel 那几千页的手册
    也没有一行 C++代码
    万事万物都是有联系的
    FrankHB
        16
    FrankHB  
       2023-05-02 15:38:05 +08:00
    @user667788 要现代岂不是先得把 py 干掉?
    没什么现代语言能抄个 1930 年就有的 lambda 还有脸限制一行的吧。

    @L4Linux 什么叫不追求 memory safety ,你写的玩意儿有几个是可以随便 crash 无所谓的?
    (就是挂在导弹上漏尿的都不算 Rust 所谓的 memory safety 。)
    你要说用 Rust 是懒得 review 这种低端问题,让人跟 rustc 斗法节约时间,然而并不是所有项目都能节约出多少,这还差不多。

    @chesha1 1. 市场是大但是分层且不互通,得看水平在什么程度上。
    不限预算是无所谓的,反正什么语言都得会。
    卡死预算也是无所谓的,反正这俩都不会。
    中间层次就比较迷,得看从事的领域是不是恰好有很多已经造过的轮子。众所周知,C++和 Rust 用户造(烂)轮子的水平和品位半斤八两,如果一个领域流毒 C++烂轮子多、好轮子少,那么 C++就有超额成本;反过来就是 Rust 占便宜。但恰好这里 Rust 基本就没轮子……
    至于跟 rustc 斗的更低层次的初级用户,比 CRUD boy 贵不了多少了。
    2. 非技术问题。会折腾的没什么人有兴趣自己造更没资源推广。
    3. “挺好的”,说明比较初级。

    @uni spec ,请。

    @talkischeap567 那坨前后一致性都有问题的 shit 伪码就见过写 cmodel 的翻译成 C/C++,没见过其他抖 M 来整活的。
    tool2d
        17
    tool2d  
       2023-05-02 15:43:07 +08:00 via Android
    ai 下,也就楼主提到的这个人用 c++,而且是反潮流的。
    其他所有人都用 pytorch 写,用 gpu 加速。
    至于为什么选 c++,应该单纯就是兴趣。
    flyqie
        18
    flyqie  
       2023-05-02 16:05:35 +08:00 via Android
    @user667788 #4

    1. cpp 能踩的坑大部分别人都踩了,相关方案可能不够好但基本都有。

    2. 好招人,rust 目前高级别不好招。

    3. 不像 rust 语法那样不好 review ,相对来说清晰的多(个人感觉)。

    4. 生态问题,rust 没出以前大家都是 cpp 什么的写,再加上 cpp 目前好像也没个靠谱的 abi 。

    5. 使用 rust 可能会有些特性很优秀,但这完全抵不上从 cpp 迁移到 rust 的劣势,不同项目有不同的搞法,不是所有项目都有必要用 rust 更换 cpp 。
    chesha1
        19
    chesha1  
       2023-05-02 17:51:45 +08:00   ❤️ 1
    @FrankHB 看上去你对于 rust 有很独特的偏爱,不过你要是把自己用来批判别人的时间挪一点出来,给 rust 生态做贡献,“会折腾的没什么人有兴趣自己造更没资源推广”这种现象就会变少一点了
    Nugine0
        20
    Nugine0  
       2023-05-02 18:14:07 +08:00
    这不就是 ML sys 方向吗,有没有人说说岗位需求大不大
    FrankHB
        21
    FrankHB  
       2023-05-02 18:19:20 +08:00
    @chesha1 不,刚好相反,我首先不怎么有兴趣对连 prioritize spec 都搞不定的项目做贡献。Rust 能有显著性,只因在座的各位(在对付 memory safety 等问题上)更加辣鸡,所以显得 Rust 在对付不听话的 coder 节约 review 成本上有奇效。但是……我本来就不需要对付这些人。
    另一方面,Rust 确保 safety 依赖具体 ad-hoc type system 的设计的欠缺灵活性是我直接不爽的——比如没法单独要 memory safety 而无视 concurrency safety (即便我甚至可以证明某段代码就是单线程下跑的),导致一些简单的写法不 unsafe 就表达不出来——如果时常考虑 unsafe 那我干嘛还要允许 rustc 浪费时间?所以我都不会拿 Rust 的设计过来抄,而是当作反面教材用。
    至于没有兴趣折腾是很正常的,主要不是 Rust 的问题——而是因为一些基础设施不管用什么语言重新实现都很无聊,耗费资源又大,既然原来的东西不是烂到没法用,就没什么人有动机来推了。
    比如这里很多东西依赖 CUDA 吧,但你也没法说老黄一直能嘚瑟,等写得差不多了,新一代跨设备的行业标准来了怎么办,岂不是 49 年入国军?关于 GPU 这方面软件栈长期选型问题都是传统艺能了,DX 还是 GL ,GL 还是 Vulkan ,要折腾迟早都要踩一遍坑。别人非得对付是因为有具体项目需求,我又没有,现在有了也可以用现成的凑数,又不是没法用。那么为什么不当等等党,拖着减少要踩的坑的绝对数量,等到有确定的具体项目需求发现不得不重新造了再说?
    kiwi95
        22
    kiwi95  
       2023-05-02 18:26:25 +08:00 via Android
    @FrankHB 其它语言在严格的 linter 和 review 下可以开发出几乎不会随意 crash 的程序,并且开发速度比 rust 快培训成本低,而 rust 为了追求所谓 mem safety 引入太多概念和复杂的写法
    Deplay
        23
    Deplay  
       2023-05-02 18:30:11 +08:00
    不是被忽视,而是底层基本 cpp ,炼丹有 pytorch 这一类的为什么不用
    FrankHB
        24
    FrankHB  
       2023-05-02 18:40:58 +08:00
    @kiwi95 其它语言能不 crash 是有代价的,在 memory safety 问题上基本都依赖 GC (倒不需要 lint ),极少部分是 region-based 但基本没在工业界有显著性。依赖 GC 导致的 STW/latency 问题一直就没真正彻底解决过(总不能让用户都上 TB 级别的主存用 Azul C4 吧),就算现在可以不是主要问题了,RAM 利用率低下导致客户端开发从来都很糙,就不可能是正确的解决方向,只能是 workaround 。更要命的是依赖 GC 的代码在资源分配边界上缺乏不变量的混乱导致的质量问题,原则上是不可能解决的——你要非 GC 语言移植到依赖 GC 的语言直接干掉内存释放都行,反过来试试?实际上不依赖 GC 会迫使实现者分析清楚用 GC 不可能自动解决干净而本来就要人来决断的逻辑问题,设计的完善程度就是不一样的。一旦依赖 GC 就注定是半吊子实现,如果不能排除未来有更严格的质量需求,那基本得重写,提前背负这种风险相当不值。
    所以实际上光是要避免这些实用问题,比较有存在感的语言也就 C 、C++、Rust 了。然后算上其它可维护性和管理成本选哪个?(这几个语言的 lint 也没多少用。) Rust 也就是矮子里拔高个,因为剩下的编译器做得更少,就算写起来简单点,review 成本更高。当然如果什么人都不缺可以直接 C++ ,不用跟 rustc 斗了(只要有本事兜得住 ICE 和依赖管理之类乱七八糟的破事就行)。
    EHemingway
        25
    EHemingway  
       2023-05-02 18:50:47 +08:00
    AI 时代最火的编程语言:英语
    Aloento
        26
    Aloento  
       2023-05-02 19:02:24 +08:00
    pytorch 的推理核心 torch 就是 Cpp 写的,所以到头来还是各种包装,就 python 那个效率训练大模型得到什么时候去
    英语就太真实了,感觉中文区已经落后好多了
    chesha1
        27
    chesha1  
       2023-05-02 19:04:45 +08:00
    @FrankHB
    跨设备的行业标准和 cuda 又没有关系,这两个都不是一个层次上的,directx opengl vulkan 这些已经把 cuda ( opencl )封装了一层了,不可能说有一个什么新的库出来,大一统了图形 api ,就不用 cuda 了。举个后端的例子,不管是 jdbc 还是 spring ,还是以后有什么别的框架,mysql 本身还得有人写
    thorneLiu
        28
    thorneLiu  
       2023-05-02 19:31:41 +08:00 via Android
    我们做训练推理的工程化团队都是需要 cpp 的 如果在这个行业里面就知道 cpp 有多重要
    ac23
        29
    ac23  
       2023-05-02 21:04:11 +08:00
    就是 MLSys 领域的大发展
    dandycheung
        30
    dandycheung  
       2023-05-02 22:15:16 +08:00 via Android
    似乎看到了点王垠的影子。
    ShadowPower
        31
    ShadowPower  
       2023-05-02 22:36:57 +08:00
    @user667788 如果你看比较近期才开始开发的项目,那可能就在用 rust:
    https://github.com/huggingface/tokenizers
    documentzhangx66
        32
    documentzhangx66  
       2023-05-02 23:35:34 +08:00
    这个问题,需要自己有训练人工智障的经验,才知道正解。

    简单来说,C++ 与 Python 的互联网已存代码量,远大于 Rust ,这能方便人工智障进行训练而已。

    这与语言好不好,没有直接联系。
    XiiLii
        33
    XiiLii  
       2023-05-03 02:39:50 +08:00
    也许 ChatGPT5 、6 可以将各个项目的编程语言转成另一种,何必纠结现在所用的语言,熟悉什么语言就用什么语言开发
    hk3475
        34
    hk3475  
       2023-05-03 03:19:48 +08:00
    可以看看新出的 triton 和 mojo
    ispinfx
        35
    ispinfx  
       2023-05-03 09:26:00 +08:00 via iPhone
    @FrankHB 省点口水,不要和搞 ML 的部分脚本工程师讨论 Rust 和 C++。。
    Huelse
        36
    Huelse  
       2023-05-03 10:26:39 +08:00
    从市场的反馈上来说谷歌也在放弃 C++转而有了 carbon-lang ,微软也开始转向 rust 而有了 ReFS ,cloudflare 也是用 rust 重写新的代理系统。

    总体来说大企业都在放弃 C++转向其他语言,也许现在还不起眼,但在这样的推动下很可能未来的主流。
    cnbatch
        37
    cnbatch  
       2023-05-03 23:03:04 +08:00
    @Huelse “微软也开始转向 rust 而有了 ReFS”?
    这时间就不对吧,ReFS 正式推出时( 2012 年),Rust 1.0 ( 2015 年)都还没发布呀。
    Huelse
        38
    Huelse  
       2023-05-04 09:35:06 +08:00
    @cnbatch 字打快了,混淆了原来的意思。前几年微软就在挖 rust 的人了,现在直接说 win11 部分内核代码开始用 rust 实现,ReFS 作为默认文件系统,最终注定要和 rust 接轨的。
    ruanimal
        39
    ruanimal  
       2023-05-04 09:58:12 +08:00
    @tool2d 那倒不是,torch tf lgb onnx 都是 c 艹
    tairan2006
        40
    tairan2006  
       2023-05-04 10:37:39 +08:00
    虽然我也看好 rust ,但是 C++到 17 之后其实已经比较现代了,20 和 23 如果能完全落地的话,rust 的吸引力也没那么大了……
    tool2d
        41
    tool2d  
       2023-05-04 11:31:07 +08:00
    @ruanimal 用 py 写 ai ,和用 c++优化 ai ,不是同一波人。

    py 还是占了 ai 好大一片江山。
    mushuanl
        42
    mushuanl  
       2023-05-04 14:18:35 +08:00
    c++开发效率低对开发人员要求高出错难以定位,在 AI 时代难有大作为
    大家都在拼快速修改快速验证快速迭代,语言层面的事情越少越好,让开发者把重心放在业务层面的开发上
    毕竟开发人员的时薪和抢占市场对效率要求可不低,

    至于 C++能提高的那点性能,因为业务会快速修改,已经被业务开发和定位占用的时间给抵消并且变成负的了(维护代码对开发人员要求高)
    现代 C++只适合写那些不经常改变,对性能要求高,并且有高额利润的东西,这些才能养得起高水平开发人员和维护团队,例如量化,或是游戏库等,市场还会收到 rust 的抢占,应该还是会减小。
    hitsmaxft
        43
    hitsmaxft  
       2023-05-08 09:45:27 +08:00 via iPhone
    py 只是上面的皮,要想又快又好,免不了要底下 c++开发者帮你负重前行。
    前台业务和后台基建的区别
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.