Mojo의 부상: AI 우선 프로그래밍 언어의 부활

Rust, Zig, Nim과 같이 학습 곡선이 가파로운 언어와 달리, Mojo를 사용하면 개발자는 Python 라이브러리 및 프레임워크와 원활하게 통합되는 코드를 작성할 수 있습니다.

2024년 5월 21일 오후 8:29- 4달 전VENTUREBEAT.COM- James Thomason

Mojo의 부상: AI 우선 프로그래밍 언어의 부활

요약생성

바쁠 때는 리얼라이즈가 내용을 요약해 드려요.

눈 깜짝할 사이에 또 다른 프로그래밍 언어가 등장했습니다. 흔히 프로그래머는 코딩에 20%, 어떤 언어를 사용할지 결정하는 데 80%의 시간을 쓴다는 농담이 있습니다. 실제로 프로그래밍 언어가 너무 많아서 실제로 몇 개나 있는지조차 확실하지 않습니다. 다양한 사용 및 오용 상태에 있는 프로그래밍 언어가 최소 700개는 될 것입니다. 항상 더 나은 개선의 여지가 있는 것 같습니다.

AI가 계속해서 한계를 뛰어넘으면서 가장 인기 있는 프로그래밍 언어인 Java, C, Python의 한계도 뛰어넘고 있습니다. 그리고 다른 모든 것과 마찬가지로 AI는 새로운 프로그래밍 언어로 해결해야 할 또 다른 문제입니다. 하지만 이번에는 역사적으로 볼 때 그렇게 나쁜 생각은 아닐 수도 있습니다.

시작

AI가 새로운 프로그래밍 언어의 물결을 주도한 것은 이번이 처음이 아닙니다. 1970년대와 1980년대는 기호 처리와 논리 프로그래밍과 같은 획기적인 개념을 도입한 LISP, Prolog와 같은 AI 중심 언어의 황금기였습니다. 그때나 지금이나 AI는 가장 인기 있는 주제였습니다.

특히 LISP 언어는 함수형 프로그래밍 패러다임을 도입하여 소프트웨어의 미래에 큰 영향을 미쳤으며, 궁극적으로 Python, Haskell, Scala와 같은 현대 언어의 디자인에 영향을 미쳤습니다. 또한 LISP는 변수가 아닌 값에 유형을 연결하는 동적 유형 지정을 구현한 최초의 언어 중 하나였으며, 이를 통해 더욱 유연하고 손쉽게 프로토타입을 제작할 수 있었습니다. 또한 Java, Python, JavaScript와 같은 많은 최신 프로그래밍 언어에서 채택한 기능인 더 이상 사용하지 않는 메모리를 자동으로 회수하는 가비지 컬렉션을 도입했습니다. LISP가 없었다면 오늘날 우리가 있는 자리에 없었을 것입니다.

1970년대와 1980년대에 AI 분야가 이른바 “AI 겨울”이라고 불리는 오랜 기간 동안 자금 지원과 관심이 줄어들면서 LISP와 같은 특수 AI 언어에 대한 관심도 줄어들기 시작했습니다. 동시에 범용 컴퓨팅의 급속한 발전으로 시스템 프로그래밍 및 수치 계산을 포함한 광범위한 애플리케이션에 대해 더 나은 성능과 이식성을 제공하는 C와 같은 범용 언어가 부상했습니다.

Common LISP, 이미지 출처: 위키미디어 공용

AI 우선 언어의 귀환

이제 역사가 반복되는 것 같습니다. AI는 다시 한번 까다로운 문제를 해결하기 위해 새로운 프로그래밍 언어의 발명을 주도하고 있습니다. 최신 AI 알고리즘에 필요한 강력한 수치 계산 및 병렬 처리는 추상화와 기본 하드웨어의 효과적인 활용 사이의 차이를 효과적으로 해소할 수 있는 언어의 필요성을 부각합니다.

TensorFlow의 Tensor Computation Syntax, Julia와 같은 API 및 프레임워크와 함께 APL 및 J와 같은 배열 지향 언어에 대한 관심이 되살아나면서 이러한 추세가 시작되었다고 할 수 있습니다. 이러한 언어는 머신 러닝 및 신경망의 수학적 기초와 일치하는 도메인별 구문을 제공합니다. 이러한 프로젝트는 수학적 개념을 범용 코드로 변환하는 데 드는 오버헤드를 줄여 연구자와 개발자가 저수준 구현 세부 사항보다는 핵심 AI 로직에 더 집중할 수 있도록 하려는 시도였습니다.

최근에는 AI 개발의 특정 요구 사항을 해결하기 위해 처음부터 설계된 새로운 AI 우선 언어가 등장했습니다. Higher Order Company에서 만든 Bend는 AI를 위한 유연하고 직관적인 프로그래밍 모델을 제공하는 것을 목표로 합니다. Modular AI에서 개발한 Mojo는 AI 애플리케이션 구축 및 배포를 위한 고성능, 확장성 및 사용 편의성에 중점을 둡니다. Swift 프로그래밍 언어의 확장인 Swift for TensorFlow는 Swift의 고급 구문 및 사용 편의성과 TensorFlow의 머신 러닝 기능의 강력함을 결합합니다. 이러한 언어는 AI 개발을 위한 특수 도구 및 추상화를 향한 증가하는 추세를 나타냅니다.

Python, C++, Java와 같은 범용 언어가 AI 개발에서 여전히 인기가 있지만, AI 우선 언어의 부활은 LISP와 같은 언어를 탄생시킨 AI 연구 초기와 마찬가지로 AI의 고유한 요구 사항을 해결하려면 도메인의 특정 요구 사항에 맞게 조정된 특수 언어가 필요하다는 인식을 나타냅니다.

AI를 위한 Python의 한계

예를 들어 Python은 단순성, 다양성 및 광범위한 생태계로 인해 오랫동안 최신 AI 개발자들 사이에서 가장 선호되는 언어였습니다. 그러나 Python의 성능 제한은 많은 AI 사용 사례에서 주요 단점이었습니다.

Python에서 딥 러닝 모델을 학습하는 것은 매우 느릴 수 있습니다. DMV에서 창구 직원이 거스름돈을 정확히 세는 동안 기다리는 것처럼 느립니다. TensorFlow 및 PyTorch와 같은 라이브러리는 내부적으로 C++를 사용하여 도움이 되지만, 특히 데이터를 전처리하고 복잡한 학습 워크플로우를 관리할 때 Python은 여전히 병목 현상입니다.

“아직 모델 학습 대기 중”, Midjourney, VentureBeat

추론 지연 시간은 자율 주행 또는 실시간 비디오 분석과 같은 실시간 AI 애플리케이션에서 매우 중요합니다. 그러나 Python의 GIL(Global Interpreter Lock)은 여러 네이티브 스레드가 Python 바이트 코드를 동시에 실행하는 것을 방지하여 멀티 스레드 환경에서 성능이 저하됩니다.

대규모 AI 애플리케이션에서 효율적인 메모리 관리는 사용 가능한 리소스를 최대한 활용하는 데 매우 중요합니다. Python의 동적 유형 지정 및 자동 메모리 관리는 메모리 사용량과 단편화를 증가시킬 수 있습니다. C++ 및 Rust와 같은 언어에서 볼 수 있는 것처럼 메모리 할당에 대한 저수준 제어를 통해 하드웨어 리소스를 보다 효율적으로 사용할 수 있어 AI 시스템의 전반적인 성능이 향상됩니다.

특히 계산 리소스가 제한된 에지 장치에 Python을 사용하여 프로덕션 환경에 AI 모델을 배포하는 것은 어려울 수 있습니다. Python의 인터프리터 방식 및 런타임 종속성으로 인해 리소스 소비가 증가하고 실행 속도가 느려질 수 있습니다. 낮은 런타임 오버헤드와 시스템 리소스에 대한 더 나은 제어를 제공하는 Go 또는 Rust와 같은 컴파일된 언어가 에지 장치에 AI 모델을 배포하는 데 자주 사용됩니다.

Mojo 등장

Mojo는 Python의 사용 편의성과 최첨단 AI 애플리케이션에 필요한 매우 빠른 성능 사이의 차이를 해소하겠다고 약속하는 새로운 프로그래밍 언어입니다. Swift 프로그래밍 언어 및 LLVM 컴파일러 인프라의 창시자인 Chris Lattner가 설립한 회사인 Modular에서 이 새로운 언어를 만들었습니다. Mojo는 Python의 상위 집합입니다. 즉, 개발자는 기존 Python 지식과 코드베이스를 활용하는 동시에 전례 없는 성능 향상을 누릴 수 있습니다. Mojo의 제작자는 Mojo가 Python 코드보다 최대 35,000배 빠르다고 주장합니다.

Mojo 디자인의 핵심은 CUDA를 실행하는 GPU 및 기타 가속기와 같은 AI 하드웨어와의 원활한 통합에 중점을 둡니다. Mojo를 사용하면 개발자는 저수준 세부 사항에 얽매이지 않고 특수 AI 하드웨어의 모든 기능을 활용할 수 있습니다.

Mojo 예제, 출처: Mojo 문서, Modular

Mojo의 주요 장점 중 하나는 기존 Python 생태계와의 상호 운용성입니다. 학습 곡선이 가파로운 Rust, Zig, Nim과 같은 언어와 달리 Mojo를 사용하면 개발자는 Python 라이브러리 및 프레임워크와 원활하게 통합되는 코드를 작성할 수 있습니다. 개발자는 Mojo의 성능 향상을 활용하는 동시에 좋아하는 Python 도구와 패키지를 계속 사용할 수 있습니다.

Mojo는 Python과 차별화되는 몇 가지 기능을 도입합니다. Mojo는 정적 유형 지정을 지원하므로 개발 초기에 오류를 포착하고 보다 효율적인 컴파일을 가능하게 합니다. 그러나 개발자는 필요에 따라 동적 유형 지정을 선택할 수 있으므로 유연성과 사용 편의성을 제공합니다. 이 언어는 서로 다른 수준의 가변성을 제공하는 “var” 및 “let”과 같은 새로운 키워드를 도입합니다. 또한 Mojo에는 엄격한 유형 시스템 내에서 함수를 정의하기 위한 새로운 “fn” 키워드가 포함되어 있습니다.

또한 Mojo는 Rust와 유사한 소유권 시스템과 borrow checker를 통합하여 메모리 안전성을 보장하고 일반적인 프로그래밍 오류를 방지합니다. 또한 Mojo는 포인터를 사용한 메모리 관리를 제공하여 개발자에게 메모리 할당 및 할당 취소에 대한 세밀한 제어 기능을 제공합니다. 이러한 기능은 Mojo의 성능 최적화에 기여하고 개발자가 보다 효율적이고 오류 없는 코드를 작성하는 데 도움이 됩니다.

Mojo의 가장 흥미로운 측면 중 하나는 AI 개발을 가속화할 수 있는 Mojo의 잠재력입니다. CPU와 GPU 모두에서 기본 속도로 실행할 수 있는 고도로 최적화된 머신 코드로 컴파일하는 기능을 통해 Mojo를 사용하면 개발자가 성능 저하 없이 복잡한 AI 애플리케이션을 작성할 수 있습니다. 이 언어에는 데이터 병렬 처리, 작업 병렬 처리 및 파이프라이닝을 위한 고급 추상화가 포함되어 있어 개발자가 최소한의 코드로 정교한 병렬 알고리즘을 표현할 수 있습니다.

Mojo는 Apple Silicon 또는 NVIDIA GPU에서 최신 고급 언어 기능을 네이티브 멀티스레딩으로 컴파일하는 Bend와 같은 다른 새로운 AI 언어보다 개념적으로 수준이 낮습니다. Mojo는 병렬 처리에 대한 세밀한 제어 기능을 제공하므로 최신 신경망 가속을 직접 코딩하는 데 특히 적합합니다. Mojo는 개발자에게 하드웨어에 대한 계산 매핑을 직접 제어할 수 있는 기능을 제공하여 고도로 최적화된 AI 구현을 가능하게 합니다.

오픈 소스의 힘 활용

Mojo의 제작자인 Modular에 따르면 이 언어는 지난 8월에 공식적으로 출시된 이후 175,000명 이상의 개발자와 50,000개 이상의 조직으로 구성된 인상적인 사용자 기반을 확보했습니다.

인상적인 성능과 잠재력에도 불구하고 Mojo의 채택은 처음에는 독점적인 상태로 인해 지연되었을 수 있습니다.

그러나 Modular는 최근에 Apache 2 라이선스의 사용자 지정 버전으로 Mojo의 핵심 구성 요소를 오픈 소스화하기로 결정했습니다. 이러한 움직임은 오픈 소스가 Python과 같은 언어의 성공에 중요한 요인이었던 것처럼 Mojo의 채택을 가속화하고 보다 활발한 협업 및 혁신 생태계를 조성할 것입니다.

이제 개발자는 Mojo의 내부 작동 방식을 살펴보고, 개발에 기여하고, 구현에서 배울 수 있습니다. 이러한 협업적 접근 방식은 더 빠른 버그 수정, 성능 개선 및 새로운 기능 추가로 이어져 궁극적으로 Mojo를 더욱 다재다능하고 강력하게 만들 것입니다. 관대한 Apache 라이선스를 통해 개발자는 Mojo를 자유롭게 사용, 수정 및 배포할 수 있으므로 언어를 중심으로 활발한 생태계가 조성될 수 있습니다. 더 많은 개발자가 Mojo용 도구, 라이브러리 및 프레임워크를 구축함에 따라 풍부한 리소스와 지원의 이점을 누릴 수 있는 잠재적 사용자를 유치하면서 언어의 매력이 높아질 것입니다. GPL2와 같은 다른 오픈 소스 라이선스와의 Mojo의 호환성을 통해 다른 오픈 소스 프로젝트와 원활하게 통합할 수 있습니다.

완전히 새로운 AI 우선 프로그래밍의 물결

Mojo는 유망한 새로운 진입자이지만 AI 개발의 최고의 선택이 되려고 노력하는 유일한 언어는 아닙니다. AI 워크로드를 염두에 두고 처음부터 설계된 다른 몇 가지 새로운 언어도 있습니다.

주목할 만한 한 가지 예는 Swift의 강력한 언어 기능을 머신 러닝에 제공하기 위한 야심찬 프로젝트인 Swift for TensorFlow입니다. Google과 Apple의 협업으로 개발된 Swift for TensorFlow를 통해 개발자는 네이티브 Swift 구문을 사용하여 복잡한 머신 러닝 모델을 표현할 수 있었으며, 가속기에서 고성능 실행을 위해 정적 유형 지정, 자동 미분 및 XLA 컴파일의 이점을 추가로 누릴 수 있었습니다. 안타깝게도 Google에서 개발을 중단했고 이제 프로젝트가 보관되었습니다. 이는 Google과 같은 거대 기업에게도 새로운 언어 개발에 대한 사용자의 관심을 끌기가 얼마나 어려운지를 보여줍니다.

그 이후로 Google은 고성능 수치 계산 및 머신 러닝(ML)을 위한 라이브러리인 JAX에 점점 더 집중하고 있습니다. JAX는 자동 미분, XLA 컴파일 및 가속기의 효율적인 사용을 지원하는 고성능 수치 계산 및 머신 러닝 기능을 제공하는 Python 라이브러리입니다. 독립형 언어는 아니지만 JAX는 머신 러닝의 수학적 기초와 잘 맞는 보다 선명하고 기능적인 스타일로 Python을 확장합니다.

JAX 변환 예제, 이미지 출처: JAX 문서

가장 최근에 추가된 것은 Python과 유사한 언어를 GPU 커널로 직접 컴파일하는 대량 병렬 고급 프로그래밍 언어인 Bend입니다. CUDA 및 Metal과 같은 저수준 언어와 달리 Bend는 Python 및 Haskell과 더 유사하며 빠른 객체 할당, 전체 클로저 지원을 통한 고차 함수, 제한 없는 재귀 및 연속성까지 제공합니다. Bend는 GPU와 같은 대량 병렬 하드웨어에서 실행되며 명시적 병렬 주석 없이 코어 수에 따라 거의 선형적인 속도 향상을 제공합니다. 스레드 생성, 잠금, mutex 또는 원자성이 없습니다. HVM2 런타임으로 구동되는 Bend는 가능한 모든 곳에서 병렬 처리를 활용하여 모든 경우에 사용할 수 있는 만능 도구인 AI용 스위스 군용 칼입니다.

Bend 예제, 출처: Bend 문서, GitHub

이러한 언어는 최신 언어 기능과 강력한 유형 시스템을 활용하여 병렬 하드웨어에서 고성능 실행을 제공하는 동시에 AI 알고리즘을 표현력 있고 안전하게 코딩할 수 있도록 합니다.

새로운 AI 개발 시대의 서막

Mojo, Bend, Swift for TensorFlow, JAX 및 기타 AI 중심 프로그래밍 언어의 부활은 새로운 AI 개발 시대의 시작을 알립니다. 보다 효율적이고 표현력이 뛰어나며 하드웨어에 최적화된 도구에 대한 수요가 증가함에 따라 AI의 고유한 요구 사항을 특별히 충족하는 언어와 프레임워크가 급증할 것으로 예상됩니다. 이러한 언어는 최신 프로그래밍 패러다임, 강력한 유형 시스템 및 특수 하드웨어와의 긴밀한 통합을 활용하여 개발자가 전례 없는 성능으로 보다 정교한 AI 애플리케이션을 구축할 수 있도록 지원합니다.

AI 중심 언어의 부상은 AI, 언어 디자인 및 하드웨어 개발 간의 상호 작용에서 새로운 혁신의 물결을 일으킬 것입니다. 언어 설계자가 AI 연구원 및 하드웨어 공급업체와 긴밀히 협력하여 성능과 표현력을 최적화함에 따라 이러한 언어와 AI 워크로드를 염두에 두고 설계된 새로운 아키텍처와 가속기가 등장할 것입니다.

AI, 언어 및 하드웨어 간의 이러한 긴밀한 관계는 자율 시스템, 자연어 처리, 컴퓨터 비전 등의 분야에서 획기적인 발전을 이끌어내는 인공 지능의 잠재력을 최대한 발휘하는 데 매우 중요합니다. 오늘날 우리가 만드는 언어와 도구에 의해 AI 개발과 컴퓨팅 자체의 미래가 재편되고 있습니다.