제목: 대규모 언어 모델(LLM) 애플리케이션을 프로덕션에 사용하기 - Chip Huyen
1부: 프롬프트 엔지니어링 제품화의 어려움 이 부분에서는 LLM을 프로덕션에 사용하기 위한 주요 도전과제들을 다룹니다.
- 자연어의 모호성: 자연어는 모호하며, 이로 인해 LLM의 출력이 예측불가능하게 됩니다. - 프롬프트 평가: LLM은 프롬프트에 따라 다르게 반응하므로, 프롬프트를 평가하는 것이 중요합니다. - 프롬프트 버전 관리: 프롬프트 최적화 및 수정을 위한 버전 관리 시스템이 필요합니다. - 비용 및 지연 시간: LLM의 실행은 비용이 들고 시간이 걸립니다. 그래서 비용 효율적인 방법을 찾고, 빠른 처리를 위한 방안이 필요합니다. - 프롬프트 vs. 파인튜닝 vs. 대안: 프롬프트 튜닝, 파인튜닝, 임베딩 및 벡터 데이터베이스와 같은 대안적인 방법들에 대해 논의합니다.
2부: 작업 결합성 이 부분에서는 여러 작업을 구성하고 복잡한 애플리케이션을 구축하기 위해 제어 흐름과 도구를 사용하는 방법을 설명합니다.
- 여러 작업으로 구성된 애플리케이션: 복잡한 애플리케이션을 구축하기 위해 여러 작업을 어떻게 결합할 것인가에 대한 방법론을 다룹니다. - 에이전트, 도구, 제어 흐름: 애플리케이션의 다양한 부분을 조정하고 제어하는 방법에 대해 논의합니다. - 도구 vs. 플러그인: 두 가지 접근법의 장단점을 비교합니다. - 제어 흐름: 순차, 병렬, if, for 루프 등 다양한 제어 흐름에 대해 설명합니다. - 에이전트 테스트하기: LLM 에이전트를 테스트하고 개선하는 방법에 대해 논의합니다.
3부: 유망한 사용 사례 이 부분에서는 LLM을 기반으로 한 애플리케이션의 사용 사례들을 살펴봅니다.
- AI 어시스턴트: AI 어시스턴트는 복잡한 작업을 자동화하고 사용자의 작업을 돕습니다. - 챗봇: LLM 기반 챗봇은 텍스트 기반 대화를 처리하며 사용자와 상호작용합니다. - 프로그래밍과 게임: LLM은 코드 작성이나 게임 설계와 같은 작업에서 유용하게 사용될 수 있습니다. - 학습에 활용하기: LLM은 교육 및 학습 환경에서 많은 잠재력을 가지고 있습니다. - 내 데이터와 대화하기: 사용자가 자신의 데이터에 직접적으로 질문하거나 대화할 수 있는 시스템을 만드는 데 LLM을 사용할 수 있습니다. - 검색과 추천: LLM은 검색 쿼리를 이해하고 결과를 개선하는데 도움을 줄 수 있습니다. - 세일즈: LLM은 세일즈 활동을 자동화하고 개선할 수 있습니다. - SEO: LLM은 웹 페이지의 SEO를 향상시키는 데 도움이 될 수 있습니다.
글의 주요 결론은 LLM이 높은 잠재력을 가지고 있지만, 그것을 제품화하고 실제 환경에 배포하는 것은 여전히 많은 도전과제를 안고 있다는 것입니다.
나도 몰라서 고생했던 부분이 많은데, 특히 command shell, version control(Git), remote machine 등에 대한 내용은 모델을 배포할 때, 처음에 시스템을 설정할 때 등 유용하게 쓰이는 테크닉들이다.
아무래도 CS전공이 아닌 데이터 사이언티스트나 분석가 분들이 많이 찾는 내용이 가득할 것이다.
--- 수업 동기:
왜 우리가 이 수업을 가르칠까요?
전통적인 컴퓨터 과학(CS) 교육을 듣는 동안 운영 체제, 프로그래밍 언어, 기계학습에 이르기까지 CS 내의 고급 주제들을 가르치는 많은 수업을 듣게 될 것입니다. 그러나 많은 기관에서는 거의 다루지 않고 학생들이 스스로 학습할 수 있도록 남겨진 필수적인 한 가지 주제가 있는데 바로 컴퓨터 생태계 활용 능력입니다.
지난 수 년간, 우리는 MIT에서 몇 가지 수업을 하는 것을 도왔고, 계속해서 많은 학생들이 사용하는 툴에 대한 제한된 지식을 가지고 있다는 것을 알았습니다. 컴퓨터는 수동 작업을 자동화하기 위해 만들어졌지만 학생들은 종종 손으로 반복 작업을 수행하거나 version control과 text editor와 같은 강력한 도구를 충분히 활용하지 않았습니다. 최상의 경우, 이는 비효율성과 시간 낭비를 초래하고, 최악의 경우 데이터 손실이나 특정 작업을 완료할 수 없는 등의 문제를 초래합니다.
이러한 주제들은 대학 커리큘럼의 일부로 가르치지 않습니다. 학생들은 이러한 도구들을 어떻게 사용하는지를 결코 알 수 없거나, 적어도 어떻게 효율적으로 사용하는지를 알지 못하며, 따라서간단해야 할과제에 시간과 노력을 낭비합니다. 표준 CS 커리큘럼은 학생들의 삶을 훨씬 더 쉽게 만들 수 있는 컴퓨팅 생태계에 대한 중요한 주제들이 빠져 있습니다.
여러분의 CS 교육에서 누락된 학기
이 문제를 해결하기 위해 우리는 효과적인 컴퓨터 과학자와 프로그래머가 되기 위해 중요하다고 생각하는 모든 주제를 다루는 수업을 운영하고 있습니다. 이 수업은 실제적이고 실용적이며, 여러분이 접하게 될 다양한 상황에서 즉시 적용할 수 있는 툴과 기술에 대한 실습 소개를 제공합니다. 이 수업은 2020년 1월 MIT의 “독립 활동 기간” 동안 운영되고 있는데, 이는 단축 수업을 위한 한 달짜리 학기입니다. 수업 자체는 MIT 학생들만 수강할 있지만 녹화된 수업 영상과 함께 모든 수업 자료를 대중에게 제공할 예정입니다.
만약 이 내용이 여러분에게 해당하는 것처럼 들린다면, 이 수업이 무엇을 가르칠 것인지에 대한 구체적인 예들이 아래에 나와 있습니다:
Command shell
별칭(aliases), 스크립트 및 빌드 시스템을 사용하여 일반 작업과 반복 작업을 자동화하는 방법에 대해 알아봅니다. 일반 문서에서 복사-붙여넣기 명령어를 더 이상 사용하지 않을 겁니다. “이 15개의 명령을 차례로 실행”을 더 이상 하지 않을 겁니다. “이것을 실행하는 방법을 잊었다”거나 “이 argument의 사용법을 잊어버렸다”는 말은 더 이상 하지 않을 겁니다.
예를 들어, 여러분의 shell history를 빠르게 검색하는 것은 엄청난 시간 절약이 될 수 있습니다. 아래와 같이 명령변환을 위한 shell history 탐색과 관련된 몇 가지 트릭을 보여 줍니다.
Version control
Version control을올바르게사용하는 방법과 이를 활용하여 난관에서 여러분을 구하고, 다른 사람들과 협력하며, 문제가 있는 변경사항을 신속하게 찾아 격리하는 방법에 대해 알아봅니다.rm -rf; git clone을 수행하는 일은 더 이상 없을 겁니다. 병합 충돌은 더 이상 없을 겁니다(글쎄요, 최소한 더 적은 수라고 해야겠군요). 주석이 들어간 큰 코드 블록은 더 이상 없을 겁니다. 어떤 요소가 여러분의 코드를 깨트리는지 더 이상 애태우지 마세요. “안돼, 설마 작업 중인 코드를 삭제했나?!” 라고 더 이상 외칠 일이 없습니다. Pull requests로 다른 사람의 프로젝트에 기여하는 방법까지 알려드리겠습니다!
아래와 같이git bisect를 사용하여 어떤 커밋이 unit test를 깨트렸는지 찾은 후에git revert로 수정하는 것입니다.
Text editing
로컬 및 원격으로 command-line에서 파일을 효율적으로 편집하고 고급 편집기 기능을 활용하는 방법에 대해 알아봅니다. 파일을 앞뒤로 복사하는 일은 더 이상 하지 않게 될 겁니다. 반복적인 파일 편집이 더 이상 필요 없게 됩니다.
Vim 매크로는 가장 좋은 기능 중 하나인데, 아래와 같이 html 테이블을 중첩된 vim 매크로를 사용하여 csv 형식으로 빠르게 변환시킬 수 있습니다.
Remote machines
SSH 키 및 터미널 멀티플렉싱을 사용하여 원격 시스템과 작업할 때 정상적으로 유지하는 방법에 대해 알아봅니다. 두 개의 명령을 한 번에 실행하기 위해 많은 터미널을 열어둘 필요가 더 이상 없을 겁니다. 연결할 때마다 더 이상 암호를 입력하지 않아도 됩니다. 인터넷 연결이 끊겼거나 노트북을 재부팅해야 한다고 해서 모든 것을 잃을 일은 더 이상 없을 겁니다.
아래와 같이 세션을 원격 서버에서 활성 상태로 유지하기 위해tmux를 사용하고 네트워크 로밍과 연결을 지원하기 위해mosh를 사용합니다.
Finding files
신속하게 원하는 파일을 찾는 방법에 대해 알아 봅니다. 원하는 코드가 있는 파일을 찾을 때까지 프로젝트의 파일을 클릭하는 일은 더 이상 하지 않아도 됩니다.
아래와 같이fd가 있는 파일과rg가 있는 코드 스니펫을 빠르게 찾아볼 수 있습니다. 또한fasd를 사용하여 최근/자주 사용하는 파일/폴더도cd와vim을 실행할 수 있습니다.
Data wrangling
Command-line에서 직접 데이터 및 파일을 빠르고 쉽게 수정, 보기, 구문 분석, 그래프 그리기 및 계산하는 방법에 대해 알아봅니다. 로그 파일에서 복사, 붙여넣기를 더 이상 하지 않아도 됩니다. 데이터에 대한 통계를 더 이상 수동으로 계산하지 않아도 됩니다. 이제는 스프레드시트에 그래프를 그리지 않아도 됩니다.
Virtual machines
가상 머신을 사용하여 새로운 운영 체제를 시도하고, 관련 없는 프로젝트를 분리하며, 주 머신을 깨끗하고 깔끔하게 유지하는 방법에 대해 알아봅니다. 보안 랩을 수행하는 동안 실수로 컴퓨터를 더 이상 손상시키지 않아도 됩니다. 버전이 다른 수백만 개의 무작위로 설치된 패키지는 더 이상 필요 없습니다.
Security
여러분의 모든 비밀을 세상에 즉시 드러내지 않고 인터넷에 접속하는 방법에 대해 알아봅니다. 너무 취약한 자신의 정보과 일치하는 비밀번호를 더 이상 사용하지 않을 겁니다. 보안되지 않은 개방형 WiFi 네트워크는 더 이상 없을 겁니다. 암호화되지 않은 메시지는 더 이상 없을 겁니다.
Conclusion
위의 내용과 더불어 더 많은 내용이 12개의 수업에서 수업 내용과 함께 연습 문제를 포함되어 있습니다. 1월을 기다릴 수 없다면 지난해 IAP 때 운영했던Hacker Tools강의를 살펴봐도 좋습니다. Hacker Tools는 이 수업의 선구자격로서, 같은 주제를 많이 다루고 있습니다.
실무 경험이 없거나 적은 주니어 데이터 사이언티스트가 가장 많이 궁금해하고 알고 싶어하는 부분은 바로 본인이 한 모델링 결과를 어떻게 비즈니스에 적용하느냐에 대한 것이다.
물론 비즈니스 구조가 다르고, 사용하고 있는 시스템이 다르기 때문에 획일적인 답안이 존재하는 것은 아니지만
이러한 궁금증을 해소시켜줄 강의 자료가 있어 소개한다.
바로 스탠포드 대학의 공개 강의인 CS329s 이다.
Lecture note가 워낙 상세해서, Lecture note와 lecture slides만 봐도 큰 도움이 된다.
그리구 후반부에는 실무자들의 강연이 이어지는데,
실무에서 어떤식으로 모델링된 결과를 적용하고 모니터링하는지 아주 상세히 설명해주고 있다.
특히 아래와 같이 모니터링 코드 샘플까지 제공하고 있다!
모니터링 샘플 예시 - 실제로 모델링된 결과를 어떻게 활용하는지 보여줌
아마도 부트캠프 같은 곳에서는 실제 모델링한 결과물을 적용하는 실습을 하거나,
직간접적으로라도 경험하기 힘든 부분들이 많은데,
이런 자료를 통해 어느정도 그 니즈를 해소했으면 한다.
개인적으로 데이터 사이언티스트로서 성장하기 위해서는 MLOps라고 부르는 파트의 지식이 쌓여아 한다고 생각한다.
AI research scientist가 아닌 이상, 내가 만든 product를 보다 효율적으로 deploy하고 활용하는 방안을 고민하고, 또 필요한 경우 직접 처리 할 수 있는 skill을 배워야 한다. 이미 이러한 일들이 효과적으로 배분되어 있는 데이터팀이 있는 경우가 아니라면...(혹시 그런 팀에 있다고 하더라고 co-work을 위해^^)