당신이 몰랐던 머신러닝 엔지니어링 ML 직업 완벽 분석

당신이 몰랐던 머신러닝 엔지니어링  ML 직업 완벽 분석
Cozy CodingPosted On Jul 13, 20248 min read

링크

와, 정말 헷갈리죠!

데이터 관련, 기계 학습 관련 직업이 이렇게 다양하다니. 그런데 정작 데이터 엔지니어, 데이터 과학자, 기계 학습 엔지니어, 연구 엔지니어, 연구 과학자, 응용 과학자 사이의 차이가 뭐죠?!

이걸 알아내는 데 시간이 오래 걸렸고 헷갈렸어요. 그래서 이 블로그 포스트에서 각각의 기계 학습 관련 직업이 무엇을 의미하는지 명확하게 설명하고 싶었어요.

데이터 엔지니어

나는 처음 머신 러닝 직무를 얻었을 때 고전적인 머신 러닝 파이프라인의 여러 단계에 작업해야 했었죠. 그 중에서도 데이터 엔지니어링이 그 중심이었어요.

데이터 엔지니어링은 모든 머신 러닝 파이프라인의 기초입니다. 필요한 데이터 없이는 머신 러닝을 생각할 이유조차 없어요.

첫 번째 일 중 하나는 접속할 수 있는 하나 또는 여러 데이터 소스를 찾는 것이었어요. 그런 다음 데이터가 소스에서 목적지로 흐를 수 있도록 전체 인프라를 구축하고 유지하는 작업을 했죠.

우리는 데이터 수집 프로세스를 자동화하기 위해 Python 코드를 작성하여 미려하지 않은 XML 파일을 반환했고, 해당 파일들은 우리에게 관련된 모든 정보를 추출하고 원하는 형식으로 가공하는 전처리 과정을 거쳐야 했습니다. 추출하고 변환한 데이터는 이제 데이터 엔지니어링의 다음 단계로 보내기 위해 준비되어야 했습니다 — 데이터 웨어하우징.

우리가 오랜 시간 동안 수집한 데이터는 몇 메가바이트에서 수백 메가바이트, 심지어 테라바이트로 시시각각 커졌습니다.

나는 이제 우리가 PostgreSQL과 같은 데이터베이스에 저장한 각 데이터 포인트에 쉽게 액세스하고 필터링할 수 있는 지능적인 설계를 개발해야 했습니다. 또한 해당 데이터베이스를 유지보수해야 했습니다.

우리는 이제 기본적인 데이터 덤프를 보유하게 되었습니다.

마침내, 기본 데이터 분석을 수행한 다음 이 데이터를 기계 학습 모델을 위해 전처리하는 또 다른 파이프라인을 구현해야 했습니다. 실제 세계 데이터의 경우 누락된 값과 오류가 많기 때문에 데이터가 실제로 깨끗한지 확인해야 했습니다. 실제 데이터 분석 및 잠재적 모델 학습을 위해 데이터를 올바르게 형식화하기 전에 해당 사례를 처리하는 방법을 개발 및 적용해야 했습니다.

따라서 데이터 엔지니어는 데이터 수집 파이프라인을 구축하고 기관 내 데이터 흐름을 관리하는 역할을 맡고 있습니다.

여기서부터 데이터를 활용하는 다양한 방법이 있으므로 데이터 과학자가 이 데이터를 사용하는 방법을 살펴보겠습니다.

이제 우리에게 데이터가 있으니 실제로 데이터 과학자로 작업에 착수할 수 있습니다.

데이터 과학자의 기본 목표는 데이터로부터 비즈니스 통찰을 추출하는 것입니다.

즉, 데이터 과학자는 데이터를 분석하여 (때로는 수동으로) 설정된 통계적 방법을 사용하여 데이터 세트에서 패턴과 트렌드를 찾아 비즈니스 결정에 도움이 되는 통찰을 얻을 수 있습니다.

이를 탐색적 데이터 분석(EDA)이라고 합니다.

앞서 언급한 이미지 태그를 Markdown 형식으로 변경해야 합니다.

변수 중에서 실제로 유용한 것은 무엇인지 파악해야 합니다.

데이터와 문제 설정에 따라 이것만으로 충분할 수도 있지만, 이상적으로는 데이터 과학자들은 실제 결과와 미래 트렌드를 예측하는 데 데이터를 사용하길 원합니다.

주로 비즈니스 문제에 대해 작업하기 때문에, 일반적인 예로는 구매 행동을 기반으로 고객을 다른 그룹으로 분류하여 타겟 마케팅 캠페인에 활용하거나 고객 이탈 또는 사기 탐지를 예측하는 것이 있습니다. 그리고 머신러닝은 주로 데이터로부터 패턴을 학습하고 예측을 수행하는 데 뛰어난 성능을 보이기 때문에, 데이터 과학자들은 대부분 간단한 머신러닝 알고리즘을 사용하여 세분화 또는 예측 작업을 수행합니다.

대부분의 작업에는 적절한 프로그래밍과 SQL 기술이 필요하지만, 주로 주피터 노트북을 크게 넘어서지는 않을 것입니다.

이 작업은 주로 상당히 간단한 기계 학습을 포함하므로, 데이터 과학자들은 기존의 AutoML 도구를 사용합니다. 이 도구들은 자동으로 다양한 기계 학습 모델을 훈련시키고 어떤 모델이 가장 잘 수행되는지 확인할 수 있습니다.

하지만 모든 것이 그것만은 아닙니다. 언급했듯이 데이터 과학자들은 비즈니스 이해관계자들과 밀접하게 협력하며, 올바른 모델링 결정을 내리기 위해 그들의 목표를 이해해야 합니다. 또한, 기술적이지 않은 팀원 및 상급자들에게 자신의 결과를 이해하기 쉽게 제시하기 위해 강한 커뮤니케이션 기술이 필요합니다.

따라서, 데이터 과학자들은 주로 비즈니스 문제에 집중하며, 데이터를 탐색하여 패턴을 찾고 특정 결과를 예측하여 가치 있는 비즈니스 통찰을 얻을 수 있어야 합니다.

하지만 데이터가 더 복잡하고 더 정교한 기계 학습이 필요하다면, 다음 직업인 응용 과학자를 살펴보아야 할지도 모릅니다.

적용 과학자

그러면 우리의 데이터가 단순한 표 형식의 데이터가 아닌 경우에는 어떻게 할까요? 만일 문제 설정에 간단한 AutoML 도구가 작동하지 않는다면 어떻게 할까요? 예를 들어 3D 병리학 이미지나 분자를 그래프로 표현한 복잡한 생물 의학 데이터와 같이 다루고 있다면요?

첫 번째 기계 학습 업무로 돌아와서, 저는 소규모 팀에서 일하는 적용 과학 연구원이었습니다. 그래서 데이터 엔지니어링도 직접 수행해야 했어요. 하지만, 거리 네트워크와 교통 흐름을 나타내는 그래프 데이터를 다루면서 미래의 교통 흐름을 예측하는 데 일을 했고, 이는 꽤 복잡한 문제 설정이었습니다.

그럼 그 데이터를 활용하여 적용 과학자로서 제 역할은 무엇이었을까요?

내가 과학적 지식과 연구 방법을 활용하여 실제 세계의 실질적인 문제를 해결해야 했습니다. 연구자처럼 생각하고 논문을 읽고 기존 연구를 기반으로 쌓아 나가야 했습니다.

하지만 중요한 점은 이론적인 연구 방법을 훌륭하고 깔끔한 토이 데이터셋에 적용하는 것이 아니라 실제 세계 문제에 적용하는 데 관심이 많았다는 것입니다. 제 목표는 일부 벤치마크에서 성능을 약간 향상시키는 새로운 모델을 개발하는 것이 아니라 모델을 적용하고 조정하여 실제 세팅에서 작동하도록 하는 것이었습니다.

이것은 새로운 것을 개발하지 않는다는 것을 의미하지 않습니다.

응용과학자는 여전히 새로운 가설을 세우고 이를 검증하는 아이디어를 개발해야 합니다. 다만 응용과학자는 약간 다른 종류의 도전 과제를 가지고 있는 실제 세계 데이터에 작업하고 있습니다. 또한, 특정 산업(예: 의료)의 실제 문제에 기계 학습을 적용해야 하는 경우, 기계 학습과 의료 분야 간의 복합적 전문 지식이 필요하거나 이 새로운 전문 지식을 신속하게 습득하고 학문을 횡단하여 협력하는 데 뛰어난 능력이 필요할 것입니다.

It's the point where research meets production, but it usually needs the hands-on skills of professionals who work closely with production. I'm talking about those who can create and manage complex software systems for production purposes, and who might also be involved in large-scale training.

Now, let's dive into the world of ML engineers.

ML 엔지니어

We're stepping into a realm of uncertainty and various interpretations when it comes to the roles of ML engineers.

일반적인 ML 엔지니어는 정확히 무엇이며 무슨 일을 하는 걸까요?

만약 데이터 과학자가 하는 일을 기억한다면, 그것이 정말로 ML 엔지니어링인가요?

음, 어느 정도까지는 맞아요. 현대의 데이터 과학자들도 자신의 작업 흐름에서 머신러닝을 사용하고 있죠. 그렇지만 중요한 차이가 있어요.

말한 것처럼, 데이터 과학자의 목표는 비즈니스 인사이트를 생성하는 것이고, ML 엔지니어의 목표는 데이터를 제품으로 만드는 것입니다.

그것은 ML 엔지니어가 보다 좋은 엔지니어일 가능성이 높다는 것을 의미합니다. 이는 ML 엔지니어링이 사실 소프트웨어 엔지니어링의 한 분야로 간주되기 때문에 이해됩니다.

대부분의 회사에서 ML 엔지니어의 채용 절차는 주로 소프트웨어 엔지니어의 채용과 매우 유사하며, ML 특화 질문으로 소프트웨어 엔지니어링 질문을 몇 개 바꿀 수 있습니다.

일반적인 ML 엔지니어들은 소프트웨어 엔지니어링 도구를 사용하여 ML 애플리케이션을 개발하고 배포하는 방법을 알고 있어야 합니다. 앞서 언급했듯이, 그들은 종종 프로덕션을 위한 소프트웨어 시스템 구조에 대해 매우 익숙해야 합니다.

물론 이것은 많은 것을 의미할 수 있습니다. 즉, 그들에게 ML 애플리케이션에 대한 요청을 처리하기 위한 엔드포인트를 개발하고 확장 가능하게 만들거나, 교육 파이프라인을 개발하거나, 대규모 훈련을 위한 매우 복잡한 분산 컴퓨팅 인프라를 개발 및 유지보수해야 할 수도 있습니다.

ML 엔지니어를 제네릭 직책으로 고려하는 것이 합리적이라고 생각합니다. 그 직책은 ML 지식조차 필요하지 않을 수 있는 관련 역할을 포괄하고 있습니다. 예를 들어 언급된 ML 인프라 엔지니어나 ML 가속화기 또는 하드웨어 엔지니어 등이 있습니다.

또한, 준비된 사전 학습 모델의 수가 증가함에 따라, 해당 직무는 실제 ML 지식을 더 적게 요구할 것으로 보입니다.

하지만 전반적으로, 제네릭 ML 엔지니어 후보에 대해서 유명한 ML 엔지니어는 말했습니다. 고용 관리자들은 ML 지식이 그리 많지 않은 훌륭한 엔지니어를 선호할 것이라고 했습니다. 왜냐하면 훌륭한 엔지니어들이 ML을 배우는 것이 ML 전문가들이 엔지니어링을 배우는 것보다 쉽기 때문입니다.

ML 엔지니어는 소프트웨어 엔지니어의 특별한 형태입니다.

이제 마지막으로 혼란스러운 “정의” 중에서 두 개의 머신 러닝 중심 역할을 살펴보겠습니다.

연구 엔지니어/연구 과학자

이제 우리는 최첨단 머신 러닝 연구의 선두에 서 있습니다!

연구 분야에서 일하는 사람들은 실제로 Transformer 구조와 같은 모델을 개발하고, 유명한 논문 "Attention is all you need"를 발표하고, 이제는 ChatGPT-4와 같은 LLM을 개발하는 사람들입니다.

하지만 이 모두는 형편없이 힙하고 화제성 있는 연구 발전에 불과해.

이들 연구자들은 실제로 보통의 연구과학자가 하는 것과 동일한 작업을 합니다.

그게 뭐냐고?

일반적으로 연구과학자의 기본은 기계 학습과 딥 러닝에 대한 탄탄한 지식입니다. 이러한 역할은 정말로 세부 사항에 대한 탄탄한 이해를 요구합니다. 그 이후로 연구과학자는 기계 학습의 다양한 영역을 탐구하고 하나의 특정 전문 분야에 대해 더 많이 전념합니다. 한 번 그 분야를 찾으면, 현재의 최첨단 접근 방식이 무엇을 하는지, 어떻게 수행되는지, 그리고 어디를 향상시킬 수 있는지 살펴보기 위해 더 많은 논문을 찾아보게 됩니다.

요약하면, 그들은 새로운 가설을 제시하고 이를 실행해보며 가설을 검증하기 위한 실험을 설계합니다.

이 모든 과정은 많은 논의와 상호작용을 필요로 하며, 연구자의 역할에 대해 자세히 설명하는 것은 별도의 글이 될 수 있습니다. 하지만 이상적인 상황에서, 연구 과학자들은 논문을 발표하고 멋진 학회에 참석합니다.

지금까지 연구 과학자의 역할에 대해 많은 이야기를 했지만, 연구 엔지니어는 어떨까요?

이것이 난해한 부분입니다. 이 역할은 실제로 상당히 드물며 대부분 산업의 주요 연구소에서만 나타납니다.

말이 좀 쉽게 표현하자면, 연구과학자의 역할은 이미 소개된 대로 원래의 아이디어를 고안하는 것이며, 연구 엔지니어의 역할은 이러한 아이디어의 구현을 맡아 공학 기술을 활용하여 필요한 실험을 설계하고 실행하는 것이라고 할 수 있습니다.

실제로 이 두 역할 사이의 경계는 매우 모호합니다. 왜냐하면 연구 과학자는 여전히 자신이 엔지니어이어야 하며 두 역할 모두 아이디어를 고안하고 구현하기 때문입니다.

또한, 연구 과학자와 연구 엔지니어가 논문에 동등하게 기여하는 것이 흔한데, 그중 가장 유명한 예가 "Attention Is All You Need" 논문입니다.

가장 큰 차이는, 입문 연구 과학자 역할은 일반적으로 박사 학위와/ 또는 최우수 학회의 제1저자 논문이 필요하기 때문에 조금 더 많은 돈을 받는다는 것입니다. 반면 연구 엔지니어 역할은 일반적으로 필요하지는 않지만 논문은 언제나 도움이 된다는 것입니다.

말고나면, 다양한 직책은 주로 관료주의의 산물입니다.

재미있는 것은, 이 모든 역할 설명은 경력 지향을 위해 유용하지만 종종 실제로 일하게 될 일을 잘 반영하지 못하는 경우가 많습니다.

같은 팀에서 동일한 직책을 맡은 두 사람이 매우 다른 작업을 할 수 있고, 서로 비슷한 작업을 하는 두 사람이 서로 다른 직책을 가질 수도 있습니다.

어떤 역할에서 무엇이 요구되는지 확인하는 가장 좋은 방법은 구인 공고의 실제 설명을 살펴보는 것입니다.

그러나 대부분의 경우 ML과 가장 많이 관련된 역할은 연구 과학자/엔지니어이기 때문에 저는 이 역할을 가장 좋아합니다.

하지만 모두에게 맞지는 않습니다. 만약 ML 연구자로서의 혹독한 현실이 궁금하다면, 다음 글을 읽어보시기 바랍니다.

읽어 주셔서 감사합니다. 잘 가세요! 👋