App下載

超越Python快68000倍,Python生態(tài)最新升級!Mojo,專為AI設(shè)計的新型編程語言。

諸葛亮晶晶 2023-09-20 16:39:16 瀏覽數(shù) (1893)
反饋

自 5 月 2 日首次亮相以來,Modular 公司的 Mojo 編程語言引起了開發(fā)人員的極大興趣,已經(jīng)有超 12 萬開發(fā)人員注冊使用 Mojo Playground,19 萬開發(fā)者熱情參與 Discord 與 GitHub 討論。Fast.ai 聯(lián)合創(chuàng)始人、數(shù)據(jù)科學家 Jeremy Howard 更是表示,“Mojo 可能是近幾十年來最大的編程語言進步?!?br>

Mojo 能夠切實滿足開發(fā)者需求,引導大家逐步采用新功能,從而在必要時獲得高性能體驗。具體來說,Mojo 可以為開發(fā)者帶來的主要收益:

 

  • 一種語言編寫所有內(nèi)容:Mojo 能夠隨時隨地服務(wù)于 AI 開發(fā)者,將 Python 的可用性與以往強制開發(fā)者使用 C、C++ 或 CUDA 的系統(tǒng)編程功能結(jié)合起來。 開發(fā)者可以在公共代碼庫上工作,從而簡化從研究到生產(chǎn)的整個工作流程。
  • 突破 Python 性能極限:時至今日,Python 已經(jīng)無處不在。但對于需要更高性能或特殊硬件的任務(wù),Python 的表現(xiàn)往往不那么理想。Mojo 能夠發(fā)揮 CPU 的性能潛力,并可良好支持 GPU 和 ASIC 等外部加速器,提供與 C++ 和 CUDA 相當?shù)淖吭叫阅堋?/li>
  • 對接完整 Python 生態(tài)系統(tǒng):Mojo 提供與 Python 生態(tài)系統(tǒng)間的全面互操作性,使其能夠無縫利用 Python 庫資源,同時發(fā)揮 Mojo 自身的功能與性能優(yōu)勢。例如,開發(fā)者可以將 NumPy 和 Matpotlib 同自己的 Mojo 代碼無縫混合起來。
  • 升級 AI 工作負載:Mojo 緊密集成有模塊化 AI 引擎,允許開發(fā)者通過自定義操作輕松擴展自己的 AI 工作負載,包括預處理、后處理操作和高性能數(shù)學算法。開發(fā)者還可以引入內(nèi)核融合、圖重寫、sharp 函數(shù)等。

通過對現(xiàn)有 Python 代碼做一點簡單變更,開發(fā)者就可以使用 Mojo 對高計算強度工作負載進行顯著加速(最高可提速 6.8 萬倍)。目前,Mojo 的實際應(yīng)用案例包括:

Mojo 號稱將動態(tài)和靜態(tài)語言的優(yōu)點結(jié)合在一起,性能可達到目前 Python 的 68,000 倍,還提供與 Python 生態(tài)系統(tǒng)的完全互操作性,從而可以無縫使用 Python 庫。

以下為使用 Mojo 計算歐幾里得距離的代碼:

$ mojo
Welcome to Mojo! ??
Expressions are delimited by a blank line.
Type `:mojo help` for further assistance.
1> %%python
2. import numpy as np
3. n = 10000000
4. anp = np.random.rand(n)
5. bnp = np.random.rand(n)

6> from tensor import Tensor
7. let n: Int = 10000000
8. var a = Tensor[DType.float64](n)
9. var b = Tensor[DType.float64](n)
10. for i in range(n):
11.    a[i] = anp[i].to_float64()
12.    b[i] = bnp[i].to_float64()

13> from math import sqrt
14. def mojo_naive_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
15.    var s: Float64 = 0.0
16.    n = a.num_elements()
17.    for i in range(n):
18.       dist = a[i] - b[i]
19.       s += dist*dist
20.    return sqrt(s)

23> fn mojo_fn_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
24.    var s: Float64 = 0.0
25.    let n = a.num_elements()
26.    for i in range(n):
27.       let dist = a[i] - b[i]
28.       s += dist*dist
29.    return sqrt(s)
30.
31> let naive_dist = mojo_naive_dist(a, b)
32. let fn_dist = mojo_fn_dist(a, b)
33. print(fn_dist)
34. 
1290.821425092235
35. print(naive_dist)
36. 1290.8521425092235

此外,Mojo 允許開發(fā)者構(gòu)建靜態(tài)編譯的可執(zhí)行文件,可以在沒有任何依賴項的情況下進行部署,例如:

$ mojo build hello.??

$ ./hello
Hello Mojo ??!
9
6
3

$ ls -lGtranh hello*
-rw-r--r-- 1 0   817 Sep  3 23:59 hello.??
-rwxr-xr-x 1 0   22K Sep  3 23:59 hello

Mojo 還擁有 Visual Studio Marketplace 的官方擴展,支持語法高亮、語句診斷、格式化、補全建議等。

在即將發(fā)布的新版本中,團隊將在 VS Code 中添加通過 LLDB 命令行界面實現(xiàn)的交互式調(diào)試體驗。不僅如此,Mojo 的調(diào)試程序能夠在同一調(diào)試會話中無縫對 Mojo/C/C++ 混合代碼進行操作,進一步增強開發(fā)者在處理高度專業(yè)化代碼時的能力。


0 人點贊