모조(Mojo)가 드디어 오픈소스가 되었습니다... 그래서 직접 테스트해 보았습니다

BBetter Stack
컴퓨터/소프트웨어

스크립트

00:00:00프로그래밍 언어인 Mojo가 드디어 1.0 버전을 출시했는데, 시기가 좀 묘합니다.
00:00:05처음엔 소스코드가 비공개인 상태로 나왔다가 7일 만에 오픈소스로 전환되었고,
00:00:09퀄컴이 그 회사를 인수했습니다.
00:00:12하지만 잠시 그 이야기는 제쳐두죠.
00:00:14Mojo의 진짜 핵심은 속도를 위해 C++이나 CUDA를 포기하지 않으면서도 파이썬 같은 코드를 쓸 수 있다는 점입니다.
00:00:20정말 그 약속을 지키는지 한번 확인해 보겠습니다.
00:00:27Mojo의 핵심은 바로 이 질문에서 시작됩니다.
00:00:30코드가 파이썬처럼 생기고 느껴지면서도,
00:00:34C++이나 CUDA를 내려놓지 않고 실제로 중요한 부분을 실행할 수 있다면 어떨까요?
00:00:39CPU와 GPU를 아우르는 하나의 가독성 좋은 언어 말입니다.
00:00:42그게 바로 이 프로젝트의 전부입니다.
00:00:43마침내 Mojo가 1.0이 된 지금, 이 모든 장점이 과연 얼마나 현실적인지 직접 확인해보고 싶었습니다.
00:00:49그러니 퀄컴의 인수나 오픈소스 이야기로 넘어가기 전에, 일단 코드를 실행해 보죠.
00:00:53작업 속도를 높여주는 코딩 도구에 관심이 있으시다면 구독해 주세요.
00:00:57유용한 영상들이 계속 업로드됩니다.
00:00:59제 PC에서 직접 보여드릴 테지만, 여기서 Mojo 튜토리얼을 진행하려는 건 아닙니다.
00:01:03만약 Mojo를 한 번도 본 적이 없다면 파이썬처럼 보이겠지만,
00:01:07몇 가지 핵심적인 차이점을 보시게 될 겁니다.
00:01:10왼쪽은 파이썬 코드입니다.
00:01:12오른쪽은 Mojo 코드고요.
00:01:13동일한 루프, 동일한 그리드, 동일한 반복 횟수입니다.
00:01:17여기서 수학적 계산 원리를 일일이 설명하진 않겠습니다.
00:01:20두 개의 while 루프를 잘 보세요.
00:01:21똑같은 작업을 수행하고 있습니다.
00:01:23먼저 파이썬 코드를 실행해 보겠습니다.
00:01:26좋습니다.
00:01:27실행되었네요.
00:01:28끝났습니다.
00:01:28이번에는 동일한 프로그램을 Mojo로 컴파일해서 실행해 보죠.
00:01:32마찬가지로 실행합니다.
00:01:35짠.
00:01:35완료되었습니다.
00:01:36참고로 체크섬의 마지막 자리는 완벽히 일치하지 않습니다.
00:01:3925만 번 연산 중에서 수백 정도의 미세한 차이가 납니다.
00:01:43파이썬은 곱셈을 먼저 하고 덧셈을 수행하지만,
00:01:45Mojo 컴파일러는 이를 하나의 명령어로 통합(fusing)할 수 있거든요.
00:01:49일부 픽셀 처리에서 반복이 한 번 더 일어날 수 있습니다.
00:01:51여기서는 걸린 시간(초)을 진짜 성능 지표로 봐주세요.
00:01:54이건 NumPy도 아니고,
00:01:55특정 모델도 아닙니다.
00:01:56단순히 CPU 루프 속도가 빨라진 것만이 성능의 전부가 아닙니다.
00:02:00파이썬은 다루기 쉽기 때문에 개발을 시작하기에 좋습니다.
00:02:03하지만 성능이 중요해지면 C++이나 CUDA로 넘어가야 하죠.
00:02:06그러면 결국 두 개의 파일을 관리해야 하고, 둘은 점차 엇갈리기 시작합니다.
00:02:09그래서 Mojo가 던지는 질문은 이것입니다.
00:02:12우리가 읽고 작성하는 파일과 GPU를 구동하는 파일이 정확히 동일할 수 있을까요?
00:02:17이 함수가 바로 커널입니다.
00:02:18각각의 GPU 스레드가 한 쌍의 숫자를 더합니다.
00:02:20그게 전부죠.
00:02:21Metal, Swift, CUDA로 전환한 게 아닙니다.
00:02:24그냥 컴파일하면 됩니다.
00:02:26자, 이렇게 코드가 실행되었습니다.
00:02:28그렇습니다.
00:02:30Mojo는 꽤 흥미로운 일을 해낼 수 있습니다.
00:02:32평소에 일반 코드를 작성하던 언어(파이썬)를 그대로 사용해서 맥북 위에서 작동하는 GPU 커널을 컴파일해 낸 거죠.
00:02:38파이썬으로 말입니다.
00:02:40머신러닝 코드는 다루기 쉽기 때문에 파이썬으로 시작합니다.
00:02:44우리 모두 잘 아는 사실이죠.
00:02:45그러다 시간이 지나면 결국 성능이 중요해집니다.
00:02:48그래서 중요한 부분들을 C++이나 CUDA로 다시 작성하게 되죠.
00:02:52결과적으로 우리는 동일한 시스템의 두 가지 버전을 유지보수하게 됩니다.
00:02:55시간이 흐를수록 이런 상황은 혼란만 가중시킵니다.
00:02:58Mojo의 지향점은 읽기 좋은 파일과 성능이 빠른 파일이 완전히 동일하다는 것입니다.
00:03:03이 모든 것의 중심에는 크리스 라트너(Chris Lattner)가 있습니다.
00:03:06그는 LLVM을 만들었고, Clang과 Swift를 개발했죠.
00:03:10하지만 GPU 커널을 실행하는 것과 별개로,
00:03:14언어 버전을 1.0이라고 부르는 것은 또 다른 문제입니다.
00:03:18그렇다면 여기서 1.0이 실제로 의미하는 바는 무엇일까요?
00:03:21Mojo가 완전히 완성되었다는 뜻은 아닙니다.
00:03:23대략적인 '안정성'을 갖추었다는 의미에 가깝습니다.
00:03:25오늘 작성한 코드가 앞으로 깨지지 않을 것이라는 약속 같은 거죠.
00:03:29이러한 메이저 릴리스가 가진 의미가 바로 그렇습니다.
00:03:30하지만 여기서 첫 번째 의아한 부분이 나옵니다.
00:03:32Mojo는 컴파일러가 오픈소스가 되기도 전에 버전 1.1에 도달했습니다.
00:03:37표준 라이브러리는 이미 2024년 3월에 공개되었고,
00:03:40맥스 커널(max kernels)은 2025년에 공개되었습니다.
00:03:43하지만 핵심인 컴파일러만큼은 올해 8월 18일 전까지 소스코드가 비공개 상태로 유지되었습니다.
00:03:50Apache 2.0 라이선스로 풀렸는데, 불과 7일 전 Mojo 1.0이 출시되었을 때만 해도 여전히 비공개였기에 이는 매우 중요합니다.
00:03:57이로써 지난 3년 동안 Mojo가 받아온 가장 큰 비판 중 하나가 해소되었습니다.
00:04:02예전에는 “좋긴 한데 컴파일러가 비공개잖아”라는 말을 할 수 있었죠.
00:04:05이제는 그런 말을 하기 어렵게 되었으니 올바른 방향으로 나아가고 있는 것처럼 들립니다.
00:04:10실제로 그럴지도 모릅니다.
00:04:10불과 3주 전에 일어난 일을 살펴보기 전까지는 말이죠.
00:04:14퀄컴의 모듈러(Modular) 인수 작업은 7월 29일에 완료되었습니다.
00:04:16Mojo 1.0은 8월 11일에 출시되었고요.
00:04:19컴파일러는 8월 18일에 오픈소스로 공개되었습니다.
00:04:21즉, Mojo 역사상 가장 큰 개방 마일스톤이 모듈러가 독립 기업이 아니게 된 지 불과 3주도 되지 않아 일어난 것입니다.
00:04:29이 때문에 이 상황을 완전히 다르게 해석할 수 있는 두 가지 시각이 즉각 생겨납니다.
00:04:33첫 번째는 퀄컴이 Mojo를 모든 곳에서 쓰게 하고 싶어서 모듈러를 인수했다는 시각입니다.
00:04:37아마 아닐 겁니다.
00:04:37혹은 퀄컴이 모듈러를 인수했고, 결국 이 모든 기술이 훨씬 더 거대 기업의 시스템에 흡수될 것이라는 시각이죠.
00:04:44퀄컴은 칩을 만드는 회사입니다.
00:04:45칩에서 잘 컴파일되는 언어는 훨씬 더 큰 가치를 지니게 됩니다.
00:04:49우리는 이제 자유롭게 사용할 수 있습니다.
00:04:50그러니 오픈소스 전환 조치는 납득이 갑니다.
00:04:53하지만 Mojo의 성공 여부는 아마 퀄컴에 의해 결정되지는 않을 것입니다.
00:04:57애초에 언어를 갈아탈 만큼 Mojo가 실제로 충분히 훌륭한가에 달려 있겠죠.
00:05:02하지만 바로 이 지점에서 상황이 복잡해지기 시작합니다.
00:05:05Mojo에는 벤치마크와 관련된 문제가 있습니다.
00:05:072023년 당시 내세웠던 엄청난 수치는 Mojo가 파이썬보다 6만 8천 배 더 빠를 수 있다는 것이었습니다.
00:05:13말도 안 되는 수치죠.
00:05:14DNA 파싱 작업에서 Mojo가 Rust보다 50% 더 빠르다고 주장하는 게시물도 여전히 남아 있습니다.
00:05:19그 벤치마크 결과는 산산조각이 났습니다.
00:05:21해당 벤치마크가 애초에 측정하려던 것을 제대로 측정한 게 아니라는 점이 밝혀졌거든요.
00:05:25여전히 3만 5천 배라는 수치가 이리저리 떠도는 것을 볼 수 있습니다.
00:05:29그 수치는 행렬 곱셈에서 나온 것입니다.
00:05:31하지만 그들이 비교하고 있는 대상은,
00:05:34한쪽에는 완전히 벡터화되고 병렬화 및 타일링된 Mojo 구현체입니다.
00:05:40다른 한쪽에는 순수 파이썬으로 작성된 삼중 중첩 루프가 있죠.
00:05:44그렇습니다, 삼중 루프요.
00:05:45NumPy도 아니고, 세상 그 누구도 실제로 사용하지 않을 중첩 루프 말입니다.
00:05:49그래서 저는 3만 5천 배 더 빠르다는 주장에는 별로 관심이 없습니다.
00:05:52직접 제 컴퓨터에서 나온 수치가 필요했습니다.
00:05:54M4 Pro 환경에서 순수 파이썬과 비교해 보았죠.
00:05:57순수 파이썬 대비 26.5배 더 빨랐습니다.
00:06:00NumPy와 비교했을 때는 연산당 약 2배 정도 더 빨랐습니다.
00:06:05물론 26배가 6만 8천 배는 아닙니다.
00:06:08하지만 NumPy는 이미 내부적으로 C로 구현되어 있기 때문에 26배라는 수치도 여전히 대단한 겁니다.
00:06:14이 시점에서는 파이썬을 이긴다기보다,
00:06:16더 나은 메모리 처리 방식으로 C를 이기는 것에 가깝습니다.
00:06:19그리고 바로 이 점이 Mojo를 보며 답답함을 느끼는 부분입니다.
00:06:21하지만 성능이 제가 오늘날 Mojo 사용을 주저하는 가장 큰 이유는 아닙니다.
00:06:25전에도 가지고 놀아봤고,
00:06:27오늘 여기서 직접 실행도 해보고 있죠.
00:06:28진짜 문제는 '안정성'입니다.
00:06:30자, 이게 얼마나 안정적일까요?
00:06:32Mojo 1.0은 int, print, len 같은 핵심 내장 함수를 포함해 41개의 불안정한 API 경고와 함께 출시되었으니까요.
00:06:40소위 안정성 릴리스라는 버전 안에서 불안정하다고 표시되어 있었습니다.
00:06:45그리고 Mojo가 코드가 깨지지 않을 것이라고 약속한 바로 그날, FN 키워드를 제거하면서 약 39개의 패키지 생태계가 망가졌습니다.
00:06:52Mojo의 작동 방식에서 매우 중요했던 FN 키워드가 완전히 사라진 것입니다.
00:06:58더 이상 지원되지 않죠.
00:06:59컴파일러가 이제 오픈소스가 되긴 했지만, 아직 외부 기여를 받아들이지는 않고 있습니다.
00:07:04그러니 Mojo 1.0이 안정적이라고 말할 수는 있겠네요.
00:07:07하지만 그들이 말하는 만큼 안정적이지는 않을지도 모릅니다.
00:07:09결국 우리에게 가장 중요한 단 하나의 질문으로 귀결됩니다.
00:07:12이걸 써야 할까요?
00:07:13만약 여러분이 GPU 커널이나 CUDA, Triton 같은 세계를 다룬다면 Mojo는 확실히 하루이틀 투자해 볼 가치가 있다고 생각합니다.
00:07:21CPU와 GPU를 아우르는 단 하나의 언어이며, 저는 노트북에서 작동하는 GPU 커널을 컴파일해 냈으니까요.
00:07:27이런 기능을 제공하는 언어는 그리 많지 않습니다.
00:07:29하지만 여전히 발전해야 할 부분이 많습니다.
00:07:31그러니 당장 최우선 순위에 두지는 않는 것이 좋겠습니다.
00:07:353년 전, Mojo에 대한 반대 의견은 꽤 단순했습니다.
00:07:38멋진 새 언어이긴 한데, 누가 이걸 쓰겠냐는 거였죠.
00:07:40개발자들에게 모든 것을 걸라고 요구하는, 스타트업이 만든 폐쇄적인 언어였습니다.
00:07:44오늘날 컴파일러는 Apache 2.0 라이선스를 따릅니다.
00:07:47언어는 1.0 버전에 이르렀고요.
00:07:48그 스타트업은 이제 퀄컴의 일부가 되었습니다.
00:07:51BetterStack의 Josh였습니다.
00:07:53이와 같은 코딩 팁과 요령이 흥미로우셨다면 구독해 주세요.
00:07:56다음 영상에서 뵙겠습니다.

핵심 요약

Mojo 1.0은 컴파일러 오픈소스화와 퀄컴 인수를 거치며 파이썬의 편리함과 GPU 성능을 동시에 잡는 발전 가능성을 보여주었으나, 여전히 불안정한 API와 생태계 변화로 인해 실무 도입 전 신중한 검토가 필요하다.

하이라이트

  • Mojo 1.0 버전은 CPU와 GPU를 아우르는 단일 언어 환경을 제공하며, M4 Pro 환경에서 순수 파이썬 대비 26.5배, NumPy 대비 약 2배 빠른 속도를 기록한다.

  • 모듈러(Modular)는 7월 29일 퀄컴에 인수되었고, 8월 11일 Mojo 1.0을 출시한 데 이어 8월 18일 컴파일러 소스코드를 Apache 2.0 라이선스로 오픈소스로 전환했다.

  • Mojo 1.0은 41개의 불안정한 API 경고와 함께 출시되었으며, 핵심 키워드인 FN이 제거되면서 39개의 패키지 생태계가 영향을 받았다.

  • 초기 벤치마크에서 주장했던 파이썬 대비 6만 8천 배 속도 향상은 벡터화된 Mojo 구현체와 순수 파이썬 삼중 중첩 루프 간의 비교에서 비롯된 과장된 수치이다.

타임라인

Mojo 1.0의 기본 특징과 실행 성능

  • Mojo는 파이썬과 유사한 문법을 유지하면서도 C++이나 CUDA처럼 CPU와 GPU를 아우르는 성능을 발휘한다.
  • 실제 M4 Pro 환경에서 실행한 결과 순수 파이썬 대비 26.5배, NumPy 대비 약 2배 더 빠른 속도를 기록했다.
  • 컴파일러가 산술 연산을 통합하는 과정에서 파이썬과 미세한 연산 결과 차이가 발생할 수 있다.

파이썬의 직관적인 문법과 C++ 수준의 성능을 동시에 제공하는 Mojo의 실효성을 직접 코드를 실행하여 검증한다. 파이썬과 동일한 작업을 수행하면서도 별도의 하부 언어 전환 없이 맥북 환경에서 GPU 커널을 컴파일하고 실행할 수 있음을 보여준다.

컴파일러 오픈소스화와 퀄컴 인수 과정

  • LLVM과 Swift를 개발한 크리스 라트너가 중심에 있으며, 버전 1.0은 코드 안정성과 호환성 유지를 의미한다.
  • 모듈러는 7월 29일 퀄컴에 인수되었고, 직후인 8월 11일 Mojo 1.0이 출시되었으며 8월 18일 컴파일러가 오픈소스로 공개되었다.
  • 컴파일러 비공개라는 지난 3년간의 가장 큰 비판점이 해소되었으나, 퀄컴 인수와의 시점이 맞물려 향후 행보에 대한 다양한 해석을 낳고 있다.

메이저 버전 1.0의 의미와 함께 개발사인 모듈러가 퀄컴에 인수된 직후 컴파일러가 Apache 2.0 라이선스로 전격 공개된 일련의 흐름을 다룬다. 오픈소스 전환으로 개발 진입 장벽이 낮아졌으나, 거대 기업에 흡수된 이후의 생태계 변화 가능성이 존재한다.

벤치마크 논란과 언어 안정성 문제

  • 과거에 언급된 파이썬 대비 6만 8천 배 및 3만 5천 배 속도 향상 주장은 최적화된 Mojo와 비효율적인 순수 파이썬 삼중 루프 간의 비교에서 비롯되었다.
  • 안정성 릴리스임에도 41개의 불안정한 API 경고가 포함되어 있으며 핵심 FN 키워드가 삭제되면서 일부 패키지가 작동하지 않게 되었다.
  • GPU 커널이나 CUDA 환경을 다루는 개발자에게는 투자 가치가 있으나, 전면적인 도입을 서두르기에는 아직 해결해야 할 과제가 많다.

과도하게 부풀려진 초기 성능 수치의 허점을 짚어보고 실제 체감 성능과 대조한다. 아울러 여전히 남아 있는 API 불안정성과 급격한 문법 변경으로 인한 생태계 파손 문제를 지적하며 현재 시점에서 Mojo를 도입할 때 고려해야 할 현실적인 한계를 제시한다.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기