ML 엔지니어 입장에서 개발 언어에 대한 생각

일할 때에는 기술에 집착하지 않아야 한다고 생각을 하는데, 기왕이면 편하고 좋고 널리 쓰이는 것을 쓰면 좋으니 신경이 안 쓰이진 않는 것 같다. 그래서 시작은 역시 언어부터 왜 이걸 좋아하는지, 또는 왜 이걸 쓰고 있는지 현재의 생각을 적어본다. 시간이 된다면 계속 고수준에서 “왜 이런 방식의 스택이 좋다고 생각하는지”, “왜 이런 컨셉이 더 좋다고 생각하는지” 등등도 적어보면 좋을 것 같다.

혹여나 이 글을 읽으시는 분들에게 공감되는 부분도 있겠고, 공감되지 않는 부분도 있을 것이다. 역시 언어는 도구일 뿐이라고 생각하지만 더 좋은 도구를 편하게 쓰고 싶기 때문에, 혹시 다른 의견이 있으시다면 생각을 남겨주시길 바란다.

Python

빼놓을 수 없는 언어라고 생각한다.

대부분의 라이브러리/프레임워크에서 파이썬으로 모델링을 진행해야 한다. 모델 학습 파이프라인도 어쩔 수 없는 부분이 많다. 굳이 KubeFlow 같은 기술을 재창조할 것이 아니라면 파이썬 쓰는 것이 매우 편하다.

다만 여러 스택에서 파이썬을 바라보는 시각이 다름을 많이 느낀다. 구글 파생 프로젝트들(MLIR 관련 프로젝트, iree, TensorFlow, JAX, …)은 확실히 파이썬을 스크립트 언어로 바라보는 느낌이 강하다. “테스트를 쓰지 않는다”, “프로젝트 구조가 이상하다” 그런 말은 아니다. 그 대신 정말 “엔드 유저가 편하게 쓰는 인터페이스로 파이썬을 선택했다”라는 느낌이 드는 프로젝트가 많다.

대신 그 외의 진영은 파이썬을 정말 프로젝트의 메인 언어로 바라보는 느낌이 든다. 인터페이스라는 느낌보다는 정말 파이썬 프로젝트를 사용하는 느낌이다. 다만 핵심 동작은 역시나 C++. 사용이 편한만큼 깊게 사용하려면 이런 부분에서 조금은 이질감이 든다.

뭐가 좋고 뭐가 나쁘다라는 말은 하는 것은 아니고 (당연히 서로 장단이 있다), 만드려는 것의 종류에 따라 선호하는 기술이 달라진다는 말을 하고 싶다. 나는 연구하는 사람이 아니기 때문에, 파이썬으로 빠르게 스크립팅할 수 있으면서 코어는 파이썬과 잘 분리해주는 프로젝트가 여러모로 좋았다. 비슷한 이유로 TorchScript와 관련된 움직임, llvm/torch-mlir, TensorFlow Runtime 등에 눈이 많이 간다.

Go

최근 1년 새에 배우기 시작한 언어다. 쓰시는 분들이 주변에 많이 계시고, 여러모로 개발하기 편하다. 언어의 쉽고 어려움보다, 개발 생산성을 위한 도구들이 너무 좋다. 빠른 빌드, 잘 구성되어 있는 린팅/포맷팅 도구들, 편한 테스트 작성 & Mock 생성 등등 장점이 수없이 많다고 생각한다.

머신러닝 서버들과 연결해서 비즈니스 로직을 넣기에도 너무 좋아보인다. 요즈음 활용하기 시작했지만, 앞으로도 많이 활용해보고 싶은 언어 중 하나이다. 개발하는 느낌은 완전 스크립팅하는 느낌 🤩 아마 앞으로의 커리어를 밟아가면서 정말 많이 활용하지 않을까?

Go의 핵심 철학을 지키려면 어쩔 수 없어보이지만, CGo 활용이 아쉬운 것을 제외하면 정말 좋다.

C++

중요도는 낮다고 생각하지만, 무시할 수는 없는 언어. (연구 방향이 아닌) ML 엔지니어라면 떼놓기 힘들다고 생각한다.

직접 작성은 하지 않더라도 읽는 시간이 종종 된다. 갈수록 굳이 읽을 필요가 없는 일들이 많아지지만, 그래도 동작방식을 깊은 수준에서 이해하고 싶다면 읽고 이해하는 것은 필요하다. 굳이 모델링만을 얘기하는 것이 아니라 ML 생태계에서도 읽어야 하는 상황을 종종 접하게 된다. 머신러닝, 선형대수 연산은 아무래도 아직 대부분 C++로 처리하다보니..

특히나 엔지니어 역할이라면 여러가지 연동이나 서버 개발 작업이 들어갈 것이라 생각하는데, 그 때도 무시할 수 없는 정도는 필요하다고 생각한다. (물론 회사에 따라 다르겠다) 요즘은 TensorFlow Serving이나 Torch Serve가 워낙 잘 되어서 필요한가 싶긴 하지만, faiss, fasttext 등등 라이브러리 형태로 제공되는 경우를 무시할 수는 없어보인다.

-

그래서 위의 세가지 언어를 많이 보고 쓴다. 쓰고 보니 내가 이런 걸 써도 되는 짬인가 싶기도 하고 😅

May 12, 2022
Tags: note