最近观察 AI 热下的一些项目使用的编程语言趋势。 第一大语言不用说自然是 python ,langchain, autogpt 之流都是 python 写的。 还有一大类就是 c++,几个模型推理的硬核项目
自己有时候进去这些 repo 想看看是怎么弄的,无奈和个傻子似的看不懂 C++,也不太熟悉工具链,想要从头编译,直挠头。
这波 AI 潮下,会 C++我觉得算是一个优势
1
levelworm 2023-05-02 07:19:53 +08:00 via Android 2
C/C++这种偏底层的语言,还是需要懂其他的 domain knowledge 才有真正的价值。
|
2
Alias4ck 2023-05-02 09:31:39 +08:00
其实 pytorch 本身 就有一大半是 c++写的 只不过你没关注到而已
|
3
LeeReamond 2023-05-02 11:08:15 +08:00
没什么意义,毕竟你不太可能通过给框架内核贡献代码获得收入,更不太可能重复实现内核,另外现在都 2023 了如果要贴近底层,新项目 rust 优先级肯定更高。
|
4
user667788 2023-05-02 11:18:12 +08:00
好奇 他们为什么不用 rust , 或者用其他更现代的语言,c++给我的感觉是个老古董
|
5
L4Linux 2023-05-02 11:42:06 +08:00 3
@user667788 不追求 memory safety 而强行用 Rust 难道不是自讨苦吃?
|
6
duke807 2023-05-02 11:48:33 +08:00 via Android
@user667788
rust 开发时间要加倍,问问市场同不同意 |
7
chesha1 2023-05-02 12:39:48 +08:00
你举的两个例子,最初都是用 python 开发的,其实深度学习项目想部署,确实大概率要转成 c++,会 c++算是必备技能吧。就看你做什么层级的工作了,如果是纯做算法的工作不需要懂 c++,如果底层点,偏工程一点的岗位不可能不会的
c++其实一直没有被忽视的,就算是深度学习这个领域也是,最主流的框架用 python 调用,但是框架底层不少还是用 c++写的 |
8
chesha1 2023-05-02 12:47:13 +08:00
@user667788 我个人的理解是这样,不一定对:
1. c++市场供应更大,找个同水平的 rust 程序员花费更高,尤其是在高性能领域 2. 深度学习需要调用 cuda 和很多其他运算的库,似乎只能用 c++来做,至少 c++是主流 3. c++新标准用了之后不算太老,c++20 ,23 有各种新东西,协程, module 之类的都挺好的 |
9
uni 2023-05-02 13:13:27 +08:00 1
气抖冷,什么时候 rust 才能干翻 c++(引完战就逃((
|
10
jones2000 2023-05-02 13:17:19 +08:00
c++门槛高, 没有 4-5 年上不了手。转行赚快钱的基本不会选 c++. 选 c++后面的路是越走越宽。
|
11
dayeye2006199 OP 我现在在研究怎么把一些 CPP 写得科学计算库移植到 wasm 里,发觉工具链这块是一抹黑,cmake ,编译器这块是一点都不熟
|
12
ck65 2023-05-02 13:29:06 +08:00
Rust 在 LLM 这波屁都不敢放一个(不是我说的
|
13
crackidz 2023-05-02 13:45:43 +08:00
|
15
talkischeap567 2023-05-02 14:04:21 +08:00
intel 那几千页的手册
也没有一行 C++代码 万事万物都是有联系的 |
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 来整活的。 |
17
tool2d 2023-05-02 15:43:07 +08:00 via Android
ai 下,也就楼主提到的这个人用 c++,而且是反潮流的。
其他所有人都用 pytorch 写,用 gpu 加速。 至于为什么选 c++,应该单纯就是兴趣。 |
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 。 |
19
chesha1 2023-05-02 17:51:45 +08:00 1
@FrankHB 看上去你对于 rust 有很独特的偏爱,不过你要是把自己用来批判别人的时间挪一点出来,给 rust 生态做贡献,“会折腾的没什么人有兴趣自己造更没资源推广”这种现象就会变少一点了
|
20
Nugine0 2023-05-02 18:14:07 +08:00
这不就是 ML sys 方向吗,有没有人说说岗位需求大不大
|
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 ,要折腾迟早都要踩一遍坑。别人非得对付是因为有具体项目需求,我又没有,现在有了也可以用现成的凑数,又不是没法用。那么为什么不当等等党,拖着减少要踩的坑的绝对数量,等到有确定的具体项目需求发现不得不重新造了再说? |
22
kiwi95 2023-05-02 18:26:25 +08:00 via Android
@FrankHB 其它语言在严格的 linter 和 review 下可以开发出几乎不会随意 crash 的程序,并且开发速度比 rust 快培训成本低,而 rust 为了追求所谓 mem safety 引入太多概念和复杂的写法
|
23
Deplay 2023-05-02 18:30:11 +08:00
不是被忽视,而是底层基本 cpp ,炼丹有 pytorch 这一类的为什么不用
|
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 和依赖管理之类乱七八糟的破事就行)。 |
25
EHemingway 2023-05-02 18:50:47 +08:00
AI 时代最火的编程语言:英语
|
26
Aloento 2023-05-02 19:02:24 +08:00
pytorch 的推理核心 torch 就是 Cpp 写的,所以到头来还是各种包装,就 python 那个效率训练大模型得到什么时候去
英语就太真实了,感觉中文区已经落后好多了 |
27
chesha1 2023-05-02 19:04:45 +08:00
@FrankHB
跨设备的行业标准和 cuda 又没有关系,这两个都不是一个层次上的,directx opengl vulkan 这些已经把 cuda ( opencl )封装了一层了,不可能说有一个什么新的库出来,大一统了图形 api ,就不用 cuda 了。举个后端的例子,不管是 jdbc 还是 spring ,还是以后有什么别的框架,mysql 本身还得有人写 |
28
thorneLiu 2023-05-02 19:31:41 +08:00 via Android
我们做训练推理的工程化团队都是需要 cpp 的 如果在这个行业里面就知道 cpp 有多重要
|
29
ac23 2023-05-02 21:04:11 +08:00
就是 MLSys 领域的大发展
|
30
dandycheung 2023-05-02 22:15:16 +08:00 via Android
似乎看到了点王垠的影子。
|
31
ShadowPower 2023-05-02 22:36:57 +08:00
|
32
documentzhangx66 2023-05-02 23:35:34 +08:00
这个问题,需要自己有训练人工智障的经验,才知道正解。
简单来说,C++ 与 Python 的互联网已存代码量,远大于 Rust ,这能方便人工智障进行训练而已。 这与语言好不好,没有直接联系。 |
33
XiiLii 2023-05-03 02:39:50 +08:00
也许 ChatGPT5 、6 可以将各个项目的编程语言转成另一种,何必纠结现在所用的语言,熟悉什么语言就用什么语言开发
|
34
hk3475 2023-05-03 03:19:48 +08:00
可以看看新出的 triton 和 mojo
|
36
Huelse 2023-05-03 10:26:39 +08:00
从市场的反馈上来说谷歌也在放弃 C++转而有了 carbon-lang ,微软也开始转向 rust 而有了 ReFS ,cloudflare 也是用 rust 重写新的代理系统。
总体来说大企业都在放弃 C++转向其他语言,也许现在还不起眼,但在这样的推动下很可能未来的主流。 |
37
cnbatch 2023-05-03 23:03:04 +08:00
@Huelse “微软也开始转向 rust 而有了 ReFS”?
这时间就不对吧,ReFS 正式推出时( 2012 年),Rust 1.0 ( 2015 年)都还没发布呀。 |
38
Huelse 2023-05-04 09:35:06 +08:00
@cnbatch 字打快了,混淆了原来的意思。前几年微软就在挖 rust 的人了,现在直接说 win11 部分内核代码开始用 rust 实现,ReFS 作为默认文件系统,最终注定要和 rust 接轨的。
|
40
tairan2006 2023-05-04 10:37:39 +08:00
虽然我也看好 rust ,但是 C++到 17 之后其实已经比较现代了,20 和 23 如果能完全落地的话,rust 的吸引力也没那么大了……
|
42
mushuanl 2023-05-04 14:18:35 +08:00
c++开发效率低对开发人员要求高出错难以定位,在 AI 时代难有大作为
大家都在拼快速修改快速验证快速迭代,语言层面的事情越少越好,让开发者把重心放在业务层面的开发上 毕竟开发人员的时薪和抢占市场对效率要求可不低, 至于 C++能提高的那点性能,因为业务会快速修改,已经被业务开发和定位占用的时间给抵消并且变成负的了(维护代码对开发人员要求高) 现代 C++只适合写那些不经常改变,对性能要求高,并且有高额利润的东西,这些才能养得起高水平开发人员和维护团队,例如量化,或是游戏库等,市场还会收到 rust 的抢占,应该还是会减小。 |
43
hitsmaxft 2023-05-08 09:45:27 +08:00 via iPhone
py 只是上面的皮,要想又快又好,免不了要底下 c++开发者帮你负重前行。
前台业务和后台基建的区别 |