기계 학습에서 CI/CD가 누락된 이유는 무엇입니까?

기계 학습에서 CI/CD가 누락된 이유는 무엇입니까?

요즘은 CI(연속 통합)와 CD(연속 제공/배치)를 당연하게 받아들이기 쉽지만, 지난 30년간 소프트웨어 개발의 면모를 획기적으로 바꿔놓은 혁신적 개념들이다. 많은 사람들이 머신 러닝(ML)과 인공지능(AI)에서도 소프트웨어 개발 모범 사례를 더 강력하게 준수할 것을 요구했지만, 오늘날의 ML 실무자들은 여전히 소프트웨어 엔지니어와 동등한 수준으로 ML 배포 라이프사이클을 운영할 수 있는 간단한 도구와 워크플로우가 부족하다. 이 기사는 CI/CD 도구 세트의 이점과 오늘날의 ML 개발 라이프사이클에 불행히도 없는 것의 폐해를 탐구하기 위해 메모리 레인을 살펴본다.

CI/CD의 간략한 역사

지속적인 통합은 90년대 초 그래디 브로치(Broch Method)와 켄트 벡(슬프게도 X게임에 진출하지 못했다)의 업적으로 크게 인정받고 있다. 만약 우리가 그 시기로 순간이동하고, 플란넬과 찢어진 리바이스 청바지를 입고, 수정처럼 투명한 펩시를 마시고, 그리고 너바나의 네버마인드로 잼을 먹을 수 있다면, 우리는 월드 와이드 웹의 시작과 저렴한 개인용 컴퓨터들로 인해 폭발에 가장 적합한 급성장하는 기술 산업을 발견할 수 있을 것이다. 소프트웨어 개발자가 되기에는 좋은 시기입니다. 당신의 기술이 매우 수요가 많고, 당신의 고용주는 현금이 넘쳐납니다. 그리고 대부분의 산업에는 소프트웨어가 거의 침투되어 있지 않습니다. 그래서 백만 달러짜리 아이디어를 얻는 것은 물고기를 잡는 것보다 조금 더 어려운 일입니다. 통의 그러나 상당히 어려운 것은 소프트웨어를 만드는 것이다. 아니면, 적어도 작동하는 소프트웨어를 쓰는 것이요.

CI/CD 이전 소프트웨어 개발자의 삶은 개발과 생산 사이의 큰 차이로 인해 매우 고통스러웠다. 특히 IDE의 로컬 코드를 쉽게 개발할 수 있었지만 코드를 “프로덕션”에 넣는 것은 종종 시간이 많이 걸리고 인내심이 테스트되는 경험이었다. 소프트웨어는 지금까지 인류가 만들어낸 것 중 가장 복잡한 것입니다. 그리고 여러 사람들이 아직 만들어지지 않은 가장 복잡한 것에 대해 동시에 협력하고 있을 때, 많은 문제들이 발생할 것입니다. 예를 들어:

  • 새 기능을 완료하고 기본 프로젝트로 다시 병합하면 사용자가 변경한 코드 조각을 다른 사용자가 여러 번 편집한 것을 확인할 수 있습니다. 병합 충돌을 재미있게 해결하세요!

  • 또한 제품이 의존하는 많은 핵심 라이브러리가 변경되었음을 확인할 수 있습니다. 통합 지옥에 오신 걸 환영합니다!

  • 또한 코드에서 로컬로 실행한 테스트는 더 이상 작동하지 않습니다. 그 이유를 알아보려고 할 때, 누군가가 새로운 기능을 설명하기 위해 모든 테스트를 변경했다는 것을 알게 됩니다. 시험 업데이트와 재실행으로 주말 내내 즐겁게 보내세요!

실제로 이 시대에 실행 중인 소프트웨어가 있다는 것은 기적입니다. 이는 소프트웨어 업데이트를 배포하는 악몽과도 관련이 없습니다. 소프트웨어가 1년에 한 번, 혹은 더 자주 업데이트를 받는 것은 드문 일이 아니었고, 코드 변경을 너무 많이 포함하고 있어서 불가피하게 버그로 가득 차 있었다. 또한 소스 저장소를 사용하여 작업을 수행하는 것이 쉽고 오류가 없는 환경이라고 가정하고 있습니다. 이러한 환경도 항상 그랬던 것은 아닙니다.

브로치

CI/CD가 실제로 생태계에 적용되기까지 약 20년이 걸렸습니다. CruiseControl(2001)은 초기 오픈 소스 CI 도구였으며, 2011년에는 Jenkins와 CircleCI의 출시와 함께 거의 모든 것이 주류였다.

  1. 버전

  2. 일찍 그리고 자주 약속하기

  3. 빌드 자동화

  4. 증분 릴리스

  5. 구축 자동화

결국, CI/CD는 소프트웨어 엔지니어링 팀에게 병합 충돌, 종속성 문제 디버그, 손상된 빌드 수정 등 해야 하는 “재미없는” 작업의 양을 최소화하는 합리적인 제품 제작 방법을 제공합니다. 무엇이 잘못되었는지, 왜 그렇게 빨리 해결하는지(상대적으로) 정확히 파악하는 것은 쉽고, 이는 개발자들에게 엄청난 생산성과 삶의 질을 향상시켜 줍니다. 경험이 많은 개발자는 이러한 관행이 아직 시행되지 않은 회사에 취직하는 것조차 귀찮아하지 않을 정도입니다(물론, 그들이 스타트업에서 최고의 엔지니어이고 스스로 그것을 구축하지 않는 한).

CI/CD

만약 여러분이 ML 아트를 실천하는 사람이라면, 여러분은 개발에서 생산으로 무언가를 얻는 것의 어려움을 공감할 수 있을 것입니다. ML 생태계는 개발 프로세스를 개선하기 위한 도구들로 무르익고 있지만, 엔드 투 엔드 생산 프로세스를 단순화하는 데 실질적인 영향을 미치는 것은 거의 없다. Sarah Catanzaro는 최근 dbt의 Mergece 컨퍼런스에서 ML 툴링의 현재 상태를 다음과 같이 논의했습니다.

“ML 생태계를 살펴보면 분산 교육에서 모델 모니터링, 실험 추적에 이르기까지 모든 것을 위한 도구와 플랫폼이 있습니다. 그리고 ML 팀과 이야기를 나누면 여전히 어려움을 겪고 있습니다. 이 도구들은 쓰레기입니다. 이 도구들은 개발자의 인체공학을 염두에 두고 만들어진 것이 아닙니다.”

(논의 맥락에서 분석 워크플로우를 강력한 프로덕션급 워크플로우로 끌어올린 분석 툴로 dbt가 언급되었으며, 패널은 ML이 그 뒤를 이을 다음 분야가 될 것이라고 추측합니다. 우리는 그렇게 생각합니다!) 이전 기사에서 논의한 바와 같이, 데이터 과학자는 생산에 능숙하지 않으며, 소프트웨어 공급업체는 오랫동안 데이터 과학자에게 멋진 개발 도구를 제공하면서도 실제 프로덕션 모범 사례를 채택하도록 요구하지는 않아 왔습니다. 첨단 기술 회사들이 떠나 자체 시스템을 구축했지만, 이것은 대부분의 회사들에게 지속 가능한 전략이 아니며, 그러한 시스템을 구축하고 유지하기 위해 유니콘 ML 엔지니어를 찾고 고용하는 것은 어려운 일일 수 있다.

그렇다고 해결책이 바로 우리 앞에 있다는 뜻은 아니다. 지난 반년 동안 저는 포춘 500대 기업의 데이터 리더들과 수십 차례 대화를 나눴습니다. 이들은 ML 워크플로우가 왜 그렇게 복잡한지, 왜 아무도 ML과 CI/CD를 호환하는 시스템을 만들지 않았는지 궁금해했습니다. (“Github에 대한 변경 사항을 적용하고 싶습니다.” 이는 소프트웨어 엔지니어에게는 효과가 있지만 ML 엔지니어에게는 효과가 없는 이유는 무엇입니까?) 저는 다른 도구를 이 패러다임으로 밀어 넣으려는 시도를 여러 번 보았는데, 대부분 결과가 좋지 않았습니다. 문제는 ML이