Mojo🔥: AI를 위한 새로운 프로그래밍 언어
세계에서 가장 많이 사용되는 프로그래밍 언어 중 하나인 Python은 그 사용자 친화적인 특성 덕분에 다양한 분야에서 활용되고 있습니다. 웹 개발자부터 데이터 과학자, 마케터, 심지어 AI 전문가 등, 여러 전문가들이 Python을 선택하는 주된 이유는 초보자에게도 친숙하며 읽고 쓰기 쉬운 언어라는 점입니다.
그러나 C++이나 Rust에 비해 Python의 실행 속도는 훨씬 느리고 배포 과정이 복잡하다는 단점이 있습니다. Python 프로그램을 완성한 후 이를 사용자에게 배포하려면, Python 자체를 설치해야 하고 해당 프로그램을 실행하는 데 필요한 모든 패키지를 추가로 설치해야 합니다. C++은 속도가 빠르지만, 배우고 사용하기 어렵다는 단점이 있었습니다.
이러한 문제점들을 해결하기 위해 등장한 것이 바로 'Mojo'입니다.
Mojo🔥의 특징
단인 스레드인 Python에 비해 Mojo는 병렬 처리를 위한 최적화된 컴파일러 인프라인 MLIR를 사용하기 때문에 Mojo를 사용하여 AI 모델을 작성하면 병렬 처리를 통해 성능을 향상할 수 있습니다.
그리고 Mojo는 Python보다 약 35,000배 빠른 속도로 동작합니다.
Mojo와 Python의 구문은 몇 가지 새로운 기능을 제외하면 거의 동일하며, Mojo는 Python과 완벽하게 호환되는 것을 목표로 하고 있습니다. Python의 모든 기능과 구문을 그대로 사용할 수 있고, 이에 더해 훨씬 강력한 새로운 기능을 추가되었습니다. 따라서, 이미 존재하는 모든 Python 패키지와 라이브러리는 기본적으로 Mojo에서도 완벽하게 동작합니다.
Mojo는 AI 하드웨어를 프로그래밍하는 데 사용할 수 있습니다. 이는 기존의 프로그래밍 언어로는 불가능했던 AI 하드웨어의 복잡한 구조를 구현할 수 있게 합니다. C++이나 CUDA가 필요하지 않습니다. C++이나 CUDA는 AI 하드웨어를 프로그래밍하는 데 사용되는 프로그래밍 언어이지만, 배우고 사용하기 어렵다는 단점이 있습니다. Mojo는 이러한 단점을 보완하여 누구나 쉽게 AI 하드웨어를 프로그래밍할 수 있도록 합니다. 또한 사전 처리와 사후 처리 작업을 통해 모델을 쉽게 확장하거나, 커스텀 연산으로 작업 대체가 가능합니다. 커널 퓨전, 그래프 재작성, 형상 함수 등을 활용하여 더욱 효과적인 작업이 가능합니다.
Mojo는 컴파일러 언어이기 때문에, 프로그램이 완성되면 단일 파일로 패키징하여 배포할 수 있습니다. 더불어, Rust와 유사하게 메모리 안전을 보장하기 위한 소유권 및 차용 검사 기능도 함께 제공됩니다.
Mojo 🔥 사용하기
Mojo는 아직 초기 개발 단계이며 신청자에 한해 Playground 액세스를 허용하고 있습니다. 아래 사이트로 이동합니다.
[ Get started with Mojo ] 버튼을 클릭합니다.
기본 정보를 입력 후 [ Next ]를 클릭합니다.
아래와 같이 나온 다면 신청이 완료된 것입니다.
이후 Playground 초대 메일이 올 때까지 기다려야 합니다. 저와 같은 경우는 신청 후 약 10분 뒤에 메일이 왔습니다.
[ Access Mojo Playgroud ]를 클릭하면 Sign in 할 수 있는 페이지로 이동합니다. [ Sign in ]을 클릭하고 계속 진행합니다.
Loading 과정을 거쳐 Playground 세션이 준비됩니다.
현재 많은 사람이 Playground에 액세스 하고 있고 효율적인 리소스를 사용할 수 있도록 Playground의 세션 길이를 2시간으로 제한하고 있습니다. 만약 Playground를 계속 사용하려면 언제든지 세션을 다시 시작하면 됩니다.
Playground모습은 Jupyter Lab과 같습니다. 아래 코드는 Mojo에서도 문제없이 실행됩니다.
def add(arg1, arg2):
c = arg1 + arg2
print(c)
하지만 Mojo는 'def' 대신 'fn'을 사용하여 언제든지 개발자가 더 빠른 모드'를 선택할 수 있게 합니다. 이 모드에서는 모든 변수의 유형을 명시적으로 선언해야 합니다. 결과적으로, Mojo는 최적화된 기계어 코드를 생성하여 함수를 구현할 수 있습니다.
fn add(arg1 :Int, arg2 :Int):
let c: Int = arg1 + arg2
print(c)
또한 'class' 대신 'struct'를 사용하면 속성들이 메모리에 밀접하게 압축되어 데이터 구조를 포인터 추적 없이 사용할 수 있습니다. 이러한 기능은 C와 같은 언어의 빠른 속도를 가능하게 합니다.
class MyClass:
"""A simple example class"""
def f(self, x):
self.x = x
return self.x
struct MyClass:
"""A simple example struct"""
var x: Int
fn f(inout self, x: Int):
self.x = x
return self.x
Mojo는 불변의 값과 가변의 값을 위해 let과 var 선언을 지원합니다. let은 불변이며 var는 가변입니다.
fn compare(arg :Int):
let l: Int = 10
var v: Int
v = arg
for i in range(l):
print(v)
v = v + 1
Python module을 import 하는 방법은 아래와 같습니다.
from PythonInterface import Python
# This is equivalent to Python's `import numpy as np`
let np = Python.import_module("numpy")
# Now use numpy as if writing in Python
array = np.array([1, 2, 3])
print(array)
Mojo 프로젝트는 이제 초기단계이지만, 그 가능성과 전망은 무척이나 환상적인 것 같습니다. Mojo가 제공하는 풍부한 기능과 강력한 성능 향상은 그 자체로 큰 매력이며, 이것이 어떻게 인공지능, 머신러닝 분야를 진화시킬지 기대하게 됩니다. 이제 막 시작한 여정이지만, Mojo가 우리에게 가져다 줄 변화와 가능성을 기대해 봅니다.