AI를 위한 언어 Mojo의 등장
저는 Python이 굉장히 매력적인 언어라고 생각합니다. 자료형도 비교적 자유롭고. 개발자 친화적이며, 러닝커브도 낮고, 가장 큰 매력은 언어가 직관적이라는 것입니다. 근데, 이 모든 장점을 갖고도 실무에서 잘 쓰이지 않는 이유가 있습니다. 바로 실행속도입니다. Python의 실행속도가 느린 이유는, 인터프리어 언어인 점, 자료형이 동적으로 할당되는 점, 메모리 액세스 문제 등 여러 이유가 있습니다.
그라나 역설적이게도, Python은 이러한 점 때문에 AI분야에서 널리 사용되고 있습니다. 방대한 데이터를 쉽게 처리할 수 있고, 다양한 라이브러리가 있기 때문이죠.
Modular에서 기존 Python의 AI관련 장점을 모두 살리고 실행시간은 무려 35000배 빠른 Mojo라는 언어를 새로 공개했습니다. 소식을 접하고 Mojo에 관심이 생기게 되어 포스팅을 작성하게 되었습니다.
1. Mojo가 모조?
Mojo의 제작자는 Python의 유용성과 C의 속도 및 효율성을 결합한 프로그래밍 언어의 필요성을 인식했습니다.
그리고, 개발자가 표준 하드웨어 설명 언어를 배우지 않고도 고성능 앱을 구성할 수 있는 언어를 확립했습니다.
결과적으로 그들은 C 수준의 속도를 제공하면서 Python 생태계와 완벽하게 호환되는 Mojo를 만들었습니다.
간단하게 말하면, 기존 Python의 장점을 모두 살리면서 단점을 보완한 언어를 만들었다는 것입니다.
물론, 기존 Python 코드들도 모두 호환 가능하게 만들 예정이라고 합니다.
아래 그림에서 알 수 있듯, 심지어 기존 Python보다 약 35,000배 빠르다는 것을 알 수 있습니다.
그렇다면 어떻게 이게 가능할까요?
2. 어떻게 이렇게 빠른가?
Mojo는 프로그래머가 병렬화를 위해 벡터, 스레드 및 AI용 하드웨어 장치를 활용할 수 있도록 하는 MLIR을 사용합니다. Mojo는 Python의 단일 스레드 실행과 달리 여러 코어에서 병렬 처리를 지원합니다.
위 그림과 같습니다. 기존 Python의 단일 스레드 직렬 처리 구조를 병렬 벡터와 스레드와 AI용 하드웨어를 사용하여 빠르게 처리하는 것입니다.
3. Mojo의 목표
Mojo는 기계 학습 가속기를 위한 고유한 프로그래밍 모델을 제공하도록 설계되었습니다.
또한, Modular는 오늘날의 CPU에 텐서 및 기타 AI 가속기가 있기 때문에 Mojo가 범용 프로그래밍을 허용해야 한다고 결정했습니다. 또한 Python은 기계 학습 및 기타 분야에서 광범위하게 사용되기 때문에 Modular는 Python 생태계에 합류하기로 결정했습니다.
Python을 사용하면 언어 설계가 더욱 쉬워집니다. 대부분의 구문이 이미 결정되었기 때문에 회사는 대신 컴파일 메커니즘을 구축하고 특수 프로그래밍 기능을 제공하는 데 집중할 수 있습니다.
The Mojo language has lofty goals: we want full compatibility with the Python ecosystem,
Mojo는 ML을 위한 프로그래밍 모델을 제공하는 목표를 갖고 있으며, 궁극적인 목표는 Python의 생테와 완전히 호환되는 것이라고 합니다.
4. Try Mojo !
Mojo 언어를 실제로 사용해보려고 합니다.
방법은 위쪽의 Mojo 링크 클릭 후 왼쪽 하단의 Get started with Mojo를 클릭하면 이메일 양식을 작성하는 폼이 나옵니다.
여기에 본인의 이메일 정보를 입력하고 신청하면 2~3일 뒤 사용 가능 메일이 오게 됩니다.
Mojo는 현재 JupyterHub 환경에서 테스트해볼 수 있다고 합니다. Try Mojo에서 Get strated의 log in to the Mojo Playground를 클릭하면 JupyterHub 환경으로 이동하여 테스트할 수 있습니다.
저는 미리 엑세스를 받아놔서 바로 접속이 되었습니다!
간단하게 Hello Mojo! I'm Wonseok!만 찍어보도록 하겠습니다.
Mojo 커널을 선택한 후, 파일을 하나 생성하고 코드를 작성하여 실행했습니다.
잘 되네요 ㅎㅎ 신기합니다. 아직 시범 운영중이므로 트래픽이 몰릴 경우 사용 불가능할 수도 있다고 합니다. 나중에 좀 더 발전하여 공개된다면 조금 더 복잡한 코드를 실행해보도록 하겠습니다.!