0. Intro
인공지능, 머신러닝, 딥러닝 그리고 빅데이터 등 근 몇년간 핫한 주제를 들고왔다.
그 중 오늘 주제는 MLOps 라는건데 간단하게 설명하자면 머신러닝 (컴퓨터를 교육시킴) 을 실제 사용화 하는 하나의 life cycle, (라이프 사이클... 주기...) 을/를 의미한다.
이 사이클에 대해 이야기 할 예정인데, 본론으로 들어가기 앞서 머신러닝에 대해 간단히 설명하려 한다. (그래야 이후 글에서 부가설명 없이 문장들이 가벼워질 것 같다.)
머신러닝 = Machine Learning = ML
머신러닝이란 거창한 것이 아니다. 기계학습 이라고 하는데, 컴퓨터가 경험을 통해 학습하는 과정을 거치면서 입력되지 않은 정보에 대한 문제 해결∙의사 결정 등을 할 수 있는 인공 지능의 한 분야 라고 검색하면 나온다.
인공 지능의 한 분야이다. 좀 더 풀어서 이야기 하자면, 빅데이터, 많은 양의 데이터를 가지고 "훈련" 이라는 과정을 거쳐서 새로운 데이터가 들어왔을 때, "훈련" 이라는 과정에 새로운 데이터를 넣어서 결과를 예측하는 것이다.
함수, 라고 생각하면 이해하기 편할까?
예를들어, 사람의 특징들을 X 라고 두고, X의 특징들을 가진 사람들의 직업을 Y 라고 둔다. 이런 특징들과 Y를 하나로 묶은 세트가 여러개가 있다. 이것들을 컴퓨터가 읽고 계산을 하면서 어떤 특징들은 보통 어떤 Y를 갖고 있더라 하는 새로운 함수를 만들어낸다. 이 과정을 훈련, 트레이닝 이라고 하고, 새로운 함수를 훈련된 모델 이라고 표현한다. ("계산" 이라고 하는것은 일반적으로 ML Algorithm 이라고 치면 나오는 것들, 모델)
더 자세한 (딥 한) 내용은 따로 찾아보십시오. 저도 전문가가 아니라서..
1. DevOps
MLOps 이전에 DevOps 를 알면 훨씬 이해하기 편할거다. DevOps 는 보다 먼저 나온 개념이다.
Development (개발) 의 Dev 와 Operations (운영) 의 Ops 를 합쳐서 부르는 이름 같다.
"소프트웨어 개발" 은 머신러닝 이전부터 활발했다. 컴퓨터가 상용화되고, 거의 모든 사람들이 컴퓨터를 갖고, 거의 모든 사람들이 스마트폰을 소유하면서 소프트웨어 또한 많이 개발되었다. 실제로 생각해보면 카카오톡이 없던 시절이 엇그제 같다.
이러한 소프트웨어들은 개발이 되고 끝나는게 아니다. 지속적으로 유지보수가 진행되고 업데이트 된다. 실제로 네이버 플랫폼만 보더라도 옛날과 지금의 UI 디자인 (겉으로 보여지는 것들) 을 비교하면 조금씩 많이 변했다. 이러한 과정들이 (조금씩 업데이트되거나 오류가 고쳐지는 것들) DevOps 라고 생각한다.
(이 "과정"은 코딩뿐만 아니라, 모니터링을 하고, 개선되어야 할 부분을 찾고, 개선방향을 정하고, 코딩하고, 테스트하고, 만약 오류가 있다면 오류를 고치고, 최종적으로 배포까지의 모든 과정들을 포함한다.)
여기서 중요하게 생각할 점은, DevOps 는 계속 앞으로 나아간다는 것이다.
(지금은 이해가 안 가더라도 다음으로 넘어가자. 아래에서 더 설명하겠다.)
2. MLOps
머신러닝 + 운영 (Opeation) + 개발 (Dev) = MLOps 이다.
0번에서 이야기했던 "훈련"을 기억해보면 머신러닝은 데이터들을 기반으로 수식을 만들어내고 그 수식을 가지고 예측값을 만들어 낸다. (뭔가 다르게 이야기 한 것 같지만 결국 같은 말이다.)
근데 이 훈련된 모델이 (컴퓨터가 만들어낸 새로운 수식) 실제로 상용화 되어 비즈니스에 적용을 하면 예측값과 실제 결과값에 대한 정확도가 좋지 않은 (현저히 떨어지는) 현상이 많이 발견된다.
대부분의 원인은 이러하다.
시간이 지나면서 비즈니스의 고객들의 니즈가 달라지고, 니즈가 달라지면서 그들의 특징 또한 달라진다. 특징이 달라지면 기존의 "훈련" 때와는 다른 모양의 데이터과 결과값을 갖게되고, 결국 "새로운 수식" 은 더이상 "맞지않은 수식" 이 되는것이다.
이 부분이 DevOps와 다른 부분이다. 개발된 앱은 항상 같은 성능을 갖는다. 새로운 성능들과 비교했을 때 떨어질 순 있어도 객관적으로 봤을 때 성능이 떨어지거나 하지는 않는다. 하지만 ML 을 적용한 앱의 경우, 여러가지의 경우의 수로 "훈련된 모델"의 성능이 떨어진다. 결국 모델을 새로 훈련시켜야 하는 상황이 발생한다.
MLOps 는 모니터링을 하고, 성능이 떨어짐을 발견하고, 그렇다면 어떤 특징들을 갖고 수식을 만들지 고민하고 (비즈니스를 분석하고 결정한다), 결정한 값을 토대로 새로 모델을 훈련시키고, 훈련된 모델의 정확도를 (예측한 값이 실제값과 얼마나 유사한지, 정확도) 보고, 성능 테스트를 진행하고, 성능이 통과되면 앱에 적용하고, 적용된 앱에 오류가 나타나지 않으면 배포까지 진행하는 것이다.
3. 파이프라인
배관공 파이프라인을 생각하면 좋다. 물을 틀면 쭉쭉 이어진 배관들을 거치고 거쳐 물이 나온다. 그런 개념을 "자동화 (지속적인) 배포" 에 적용시킨 것 이다.
일반적으로 개발자들은 코드를 Git/ Github 같은 버전 컨트롤이 가능한 툴을 사용하여 코드를 관리한다. (버전 컨트롤이 가능하다는 것은, 언제 누가 어떤 코드를 추가, 삭제 하였는지 히스토리를 갖고 있다고 생각하면 될 것 같다.) 이 코드 중, 최종 코드를 바로 배포하고 싶은데 이때 활용하는것이 파이프라인이다. Jenkins 같은 툴이 존재한다. 젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다.
젠킨스같은 툴은 깃헙과 연결시킬 수 있고, 실제 앱을 호스팅하고 있는 서버와 연결할 수 있다. 그래서 젠킨스에서 빌드 버튼 하나만 누르면 깃헙에 올라가있는 코드를 가져와서 서버에 배포하는 작업을 쉽게 할 수 있는것이다. (물론 설정을 어떻게 하냐에 따라서 다르지만, 빌드 시 테스트, 설정 선택 등 여러가지 커스터마이징이 가능하다.) (또한 두개의 서버를 통해서 롤링 이라고 하는, 첫번째 서버가 배포될 동안 두번째 서버를 통해서 유저가 접근할 수 있게끔 하는 것, 그리고 첫번째 서버의 배포가 마무리되면 두번재 서버에 배포하는 것 또한 설정할 수 있다.)
배포 전략들은 MLOps 나 DevOps 나 매우 다양하고 많다.
한번쯤 찾아보는것을 추천한다.
4. 마무리
최대한 풀어서 적으려고 하니, 설명하기가 어렵다. 두서없다 라고 느껴지기도 한다.
-
만약 제가 잘못 설명한 부분이 있다면, 알려주시면 감사합니다. 바로 고치도록 하겠습니다.
이 글은 제가 이해한대로 다른 비전공자들이 이해할 수 있게끔 풀어서 쓴 글 입니다.
정확한 정보와 깊은 지식은 테크 블로그들 혹은 공식 문서들을 읽어보는 것을 추천합니다.
유튜브도 잘 나와있으니 전문가들의 유튜브 또한 추천합니다.
'ML+DL+Ops > 이해하기 쉽게 풀어쓴 글' 카테고리의 다른 글
Triplet Loss (0) | 2024.08.01 |
---|---|
[풀글] MLOps (부제: Airflow) (0) | 2022.04.06 |
댓글