Mojo:比 Python 快 35000 倍的 AI 編程語(yǔ)言
Mojo是一門剛剛發(fā)布的面向 AI 開發(fā)人員的編程語(yǔ)言。
Mojo 被設(shè)計(jì)為 Python 的超集,所以如果你已經(jīng)掌握了 Python,學(xué)習(xí) Mojo 會(huì)很容易。關(guān)鍵是 Mojo 將 Python 的易用性與 C 語(yǔ)言的性能相結(jié)合,速度比 Python 快 35000 倍!讓你魚與熊掌兼得。
如果您對(duì) AI 感興趣并且已經(jīng)了解 Python,那么 Mojo 絕對(duì)值得一試。 這篇文章將帶給你有關(guān) Mojo 的所有信息。
既生Python,何生Mojo?
Python 的簡(jiǎn)潔和強(qiáng)大使其成為數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和人工智能等領(lǐng)域的首選語(yǔ)言。 它有大量的包,幾乎涵蓋所有場(chǎng)景和功能,對(duì)任何類型的開發(fā)者都非常有用。但對(duì)于需要極致性能的場(chǎng)景,Python 僅充當(dāng)膠水語(yǔ)言,綁定到 C、C++ 和其他性能更好的語(yǔ)言上。
這促成了 numpy 和 TensorFlow 等庫(kù)的誕生。 然而,這樣做存在一個(gè)缺點(diǎn):構(gòu)建這些庫(kù)非常復(fù)雜,需要對(duì) CPython 的內(nèi)部結(jié)構(gòu)有底層的了解,且需要扎實(shí)的 C/C++ 知識(shí)等。
根據(jù) Mojo 文檔,Python 帶來(lái)的問(wèn)題更深層次,尤其是對(duì) AI 領(lǐng)域的影響。
僅靠 Python 無(wú)法解決應(yīng)用人工智能系統(tǒng)所需的所有問(wèn)題,這就是 Mojo 的誕生理由。 Mojo 是一種結(jié)合了 Python 的易用性和 C 語(yǔ)言性能的編程語(yǔ)言??胺Q魚與熊掌兼得,兩全其美的!
但 Mojo 并不是一個(gè)憑空冒出來(lái)的項(xiàng)目。 事實(shí)上,Mojo 來(lái)自一家名為 Modular 的公司,該公司由 Chris Lattner 共同創(chuàng)立,他是 Swift 編程語(yǔ)言和 LLVM 的創(chuàng)建者。 這就是為什么我認(rèn)為這個(gè)項(xiàng)目值得關(guān)注的原因。 現(xiàn)在讓我們看看 Mojo 的一些絕佳功能。
Mojo的特性
Mojo 附帶了許多開箱即用的有趣功能,下面列舉幾個(gè)我認(rèn)為很酷的功能特性。
1. Mojo 被設(shè)計(jì)為 Python 的超集
Mojo 旨在與 Python 生態(tài)系統(tǒng)完全兼容。
這意味著如果您是 Python 程序員,您可以輕松地上手 Mojo,因?yàn)檫@兩種編程語(yǔ)言有許多共同的功能、特性和庫(kù)。
Mojo 中還提供了 numpy、pandas 和 matplotlib 等庫(kù)。 下面代碼演示了如何使用 Mojo 完成 matplotlib 繪圖。
def make_plot(m: Matrix):
plt = Python.import_module("matplotlib.pyplot")
fig = plt.figure(1,[10,10 * yn // xn],64)
ax = fig.add_axes([0.0,0.0,1.0,1.0],False,1)
plt.imshow(image)
plt.show()
make_plot(compute_mandelbrot())
目前 Mojo 仍處于非常早期的階段,因此它仍然缺少 Python 的許多功能(例如,它還不支持類)。 希望在未來(lái)的更新中,Mojo 能與 Python 完全兼容。
2. 強(qiáng)類型檢查
Mojo 利用類型來(lái)實(shí)現(xiàn)更好的性能和錯(cuò)誤檢查。
def sort(v: ArraySlice[Int]):
for i in range(len(v)):
for j in range(len(v) - i - 1):
if v[j] > v[j+1]:
swap(v[j], v[j+1])
盡管你仍然可以像 Python 一樣使用靈活的類型,但 Mojo 建議使用嚴(yán)格的類型檢查。 這可以使你的代碼更加可預(yù)測(cè)、更易于管理也更安全。
3. 內(nèi)存所有權(quán)和借用檢查器
Mojo 支持 owned
參數(shù)約定,該約定用于想要獨(dú)占某個(gè)值的所有權(quán)的函數(shù)。
def reorder_and_process(owned x: HugeArray):
sort(x) # 原地更新
give_away(x^) # 轉(zhuǎn)移所有權(quán)
print(x[0]) # 錯(cuò)誤:x所有權(quán)已經(jīng)移除
這里的概念跟 Rust 類似,相信 Mojo 是借用了 Rust 的部分內(nèi)存管理思想,提升內(nèi)存安全性。
4. 自動(dòng)調(diào)節(jié)
Mojo 內(nèi)置自動(dòng)調(diào)整功能,可自動(dòng)幫你找到參數(shù)的最佳值,以便最大化利用目標(biāo)硬件的性能。
def exp_buffer[dt: DType](data: Arrayslice[dt]):
# 搜索最佳向量長(zhǎng)度
alias vector_len = autotune(1,4,8,16,32)
# 用自動(dòng)調(diào)節(jié)的最佳值作為矢量化長(zhǎng)度
vectorize[exp[dt, vector_len]](data)
5. Mojo 利用 MLIR
通過(guò)使用多級(jí)中間表示 (MLIR) ,Mojo 開發(fā)人員可以充分利用向量、線程和 AI 硬件單元。這有助于 Mojo 實(shí)現(xiàn)出色的性能,因?yàn)榕c單線程執(zhí)行的 Python 不同,Mojo 可以跨多個(gè)內(nèi)核進(jìn)行并行處理。
這就是 Mojo 比 Python 快 35000 倍的原因之一。
語(yǔ)言 | 時(shí)間 | 倍數(shù) |
---|---|---|
Python 3.10.9 | 1027s | 1倍 |
PyPy | 46.1s | 22倍 |
Scalar C++ | 0.20s | 5000倍 |
Mojo | 0.03s | 35000倍 |
如何使用 Mojo
Mojo 仍在開發(fā)中,不過(guò)你可以在基于 JupyterHub 的 Playground 上試用它。 要試用 Mojo,請(qǐng)?jiān)L問(wèn)此網(wǎng)站進(jìn)行注冊(cè)。注意,注冊(cè)時(shí)在“Modular Product Interest”這欄請(qǐng)選中 Mojo 。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440851.html
祝大家編程愉快!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440851.html
到了這里,關(guān)于Mojo:比 Python 快 35000 倍的 AI 編程語(yǔ)言的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!