요약: LLM은 프로그래머의 생산성을 향상시키며 소프트웨어 개발을 혁신하였습니다. 그러나, 상당한 양의 코드로 훈련된 판매용 LLM이 완벽하지는 않습니다. 우리 기업 고객들에게 주요한 도전 과제 중 하나는 데이터 인텔리전스를 수행해야 한다는 것입니다, 즉, 자체 조직의 데이터를 사용하여 적응하고 추론하는 것입니다. 이것은 조직 특유의 코딩 개념, 지식, 선호도를 사용할 수 있는 능력을 포함합니다. 동시에, 우리는 지연 시간과 비용을 낮게 유지하고 싶습니다. 이 블로그에서는 작은 오픈소스 LLM을 상호작용 데이터에 미세 조정함으로써 최첨단의 정확도, 낮은 비용, 최소한의 지연 시간을 달성하는 방법을 보여줍니다.
그림 1: Quick Fix는 사용자가 코드 수정을 제안하여 오류를 해결하도록 돕습니다.
결과 요약: 우리는 코드의 버 그를 수정하는 프로그램 수정 작업에 초점을 맞춥니다. 이 문제는 LLMs 없이 [1, 2] 그리고 최근에는 LLMs와 함께 [3, 4] 널리 연구되었습니다. 산업에서는 Databricks의 Quick Fix 와 같은 실용적인 LLM 에이전트가 사용 가능합니다. 그림 1은 Databricks 노트북 환경에서 작동하는 Quick Fix 에이전트를 보여줍니다. 이 프로젝트에서는 텔레메트리 분석을 위해 Databricks 직원이 작성한 내부 코드에 Llama 3.1 8b Instruct 모델을 미세 조정했습니다. 미세 조정된 Llama 모델은 내부 사용자에 대한 실시간 A/B 테스트를 통해 다른 LLMs와 비교 평가됩니다. Figure 2 에서 보여주는 결과는 미세 조정된 Llama가 GPT-4o에 비해 수용률이 1.4배 향상되면서 추론 지연 시간이 2배 줄어든 것을 보여줍니다.
그림 2: 사용자가 수용한 제안된 LLM 수정의 비율을 보여줍니다 (위) 그리고 각 Quick Fix LLM 에이전트의 추론 속도를 보여줍니다 (아래). 두 숫자 모두 GPT-4o 에이전트에 대해 정규화됩니다(아래 세부 사항 참조). 우리의 모델 (QuickFix Llama 8b Diff)은 가장 높은 정확도와 가장 낮은 대기 시간을 모두 달성합니다. diff 접미사가 있는 모델은 버그가 있는 코드에 수정을 생성하고, full 접미사가 있는 모델은 전체 코드를 생성합니다.
왜 중요한가요? 많은 조직들, 특히 기존의 Databricks 고객들은 내부 지식, 개념, 선호도를 포함하는 코딩 사용 데이터를 가지고 있습니다. 우리의 결과에 따르면, 이러한 조직들은 더 나은 코드 품질과 추론 속도를 달성하는 작은 오픈 소스 LLM들을 미세 조정할 수 있습니다. 이러한 모델은 비용, 신뢰성, 준수 이점을 위해 조직 또는 신뢰할 수 있는 제3자에 의해 호스팅될 수 있습니다.
우리는 상호작용 데이터에 대한 훈련이 특히 효과적인 세 가지 이유를 강조합니다. 첫째로, 이는 자연스럽게 생성되므로 주석 처리가 필요하지 않습니다. 둘째로, 이것은 실제로 만나게 되는 예시들을 포함하고 있으므로, 적당한 양에서도 미세 조정에 특히 유용합니다. 마지막으로, LLM 에이전트와의 상호작용으로 계속해서 상호작용 데이터가 생성되므로, 새롭게 생성된 상호작용 데이터를 반복적으로 사용하여 우리의 LLM을 더욱 미세 조정할 수 있습니다. 이를 통해 Never Ending Learning (NEL)이 가능해집니다.
다음은 무엇인가요? 우리는 이러한 교훈이 다른 엔터프라이즈 애플리케이션에도 적용될 수 있다고 믿습니다. 조직은 Databricks의 미세 조정 서비스를 사용하여 Llama와 같은 LLMs를 프로그램 수정 또는 다른 작업에 대해 미세 조정하고 모델을 단 한 번의 클릭으로 제공할 수 있습니다. 시작하려면 여기를 클릭하세요. 또한 고객 이 자신의 데이터를 사용하여 Quick Fix를 개인화할 수 있는 기능을 제공하는 것을 탐색하고 있습니다.
우리의 연구 세부사항
Databricks 워크스페이스 는 생산성 향상을 위한 다양한 LLM 에이전트를 제공합니다. 이에는 코드 자동완성을 위한 LLM 에이전트, 사용자를 돕기 위해 대화에 참여할 수 있는 AI 어시스턴트, 그리고 프로그램 수정을 위한 Quick Fix 에이전트가 포함됩니다. 이 블로그 게시물에서는 Quick Fix 에이전트 (그림 1)에 초점을 맞춥니다.
프로그램 수정은 실제로 어려운 문제입니다. 오류는 구문 오류에서 잘못된 열 이름, 미묘한 의미적 문제에 이르기까지 다양할 수 있습니다. 또한, 개인화 측면이나 제약 조건들이 항상 판매용 LLMs에서 잘 처리되지 않습니다. 예를 들어, Databricks 사용자들은 일반적으로 표준 ANSI 또는 Spark SQL을 작성하며, PL/SQL 스크립트가 아닙니다. 하지만 다른 조직에서는 다른 형식을 선호할 수 있습니다. 마찬가지로, 코드를 수정할 때 제안된 수정이 올바르더라도 코딩 스타일을 변경하고 싶지 않습니다. GPT-4, o1, 또는 Claude 3.5와 같은 독점 모델을 사용하고 프롬프트 엔지니어링을 통해 이러한 제한 사항을 해결하려고 시도할 수 있습니다. 그러나, 적시에 엔지니어링을 하는 것은 미세 조정만큼 효과적이지 않을 수 있습니다. 또한, 이러한 모델들은 비용이 많이 들고, 지연 시간은 중요한 요소입니다. 왜냐하면 사용자가 코드를 스스로 수정하기 전에 수정 사항을 제안하고 싶기 때문입니다. 컨텍스트 학습 [5] 또는 자기 반성 [6]과 같은 프롬프트 엔지니어링 접근법은 지연 시간을 더욱 늘릴 수 있습니다. 마지막으로, 일부 고객들은 다른 곳에서 호스팅되는 독점적인 모델을 사용하는 것을 주저할 수 있습니다.
Llama 8b, Gemma 4b, R1 Distill Llama 8b 및 Qwen 7b와 같은 작은 오픈소스 모델들은 다른 트레이드오프를 제공하는 대안을 제공합니다. 이러한 모델은 저렴하고 빠르며, 조직 또는 신뢰할 수 있는 제3자에 의해 훈련되고 호스팅될 수 있어 더 나은 준수를 위해 사용될 수 있습니다. 그러나, 그들은 위에 나열된 일부 독점 모델들보다 훨씬 더 나쁜 성능을 보이는 경향이 있습니다. 그림 1에서 볼 수 있듯이, Llama 3.1 8b 지시 모델은 테스트된 모델 중에서 가장 성능이 나쁩니다. 이것은 질문을 던지게 합니다:
우리는 작고 오픈 소스 모델을 적용하면서도 정확도, 비용, 속도에서 상용 모델을 능가할 수 있을까요?
즉각적인 엔지니어링이 일부 이익을 제공하긴 하지만(아래 결과 참조), LLM을 미세 조정하는 것보다 효과가 덜하며, 특히 작은 모델에 대해서는 그렇습니다. 그러나 효과적인 미세 조정을 위해서는 적절한 도메인 데이터가 필요합니다. 우리는 이것을 어디서 얻나요?
귀하의 상호작용 데이터를 사용하여 Llama 8b를 미세 조정하기
프로그램 수정 작업의 경우, 사용자가 생성하는 유기적인 상호작용 데이터를 사용하여 미세 조정을 수행할 수 있습니다. 이것은 다음과 같이 작동합니다 (그림 3):
그림 3: LLM의 끝없는 미세 조정을 위해 배포 로그를 사용하여 LLM을 미세 조정합니다.
- 우리는 버그가 있는 코드 y, 를 사용자가 코드 셀을 처음 실행하여 오류가 발생하는 시점에 기록합니다. 또한 오류 메시지, 주변 코드 셀, 메타데이터(예: 사용 가능한 테이블과 API의 목록).
- 그런 다음 사용자가 원래 버그가 있는 셀에서 코드를 성공적으로 실행할 때마다 코드를 로그에 기록합니다. 이 응답은 Quick Fix Llama 에이전트, 사용자 자신, 또는 둘 다에 의해 생성될 수 있습니다.
- 우리는 (x, y, y') 를 미세 조정을 위한 데이터셋에 저장합니다.
우리는 두 가지 극단적인 경우를 필터링합니다: 예상되는 수정된 코드 y' 가 실제 코드 y와 동일한 경우, 이는 외부 이유로 인한 버그 수정을 나타내며(예: 다른 곳에서 설정을 변경하여 권한 문제 수정), y' 가 y와 상당히 다른 경우, 이는 목표 지향적인 수정보다 재작성 가능성을 나타냅니다. 이 데이터를 사용하여 주어진 컨텍스트 x 와 버그가 있는 코드 y 를 학습하여 y' 를 생성하는 방법을 배우는 데 사용할 수 있습니다.
우리는 위에서 설명한 대로 처리된 Databricks의 자체 내부 상호작용 데이터를 사용하여 Llama 3.1 8b Instruct 모델을 미세 조정합니다. 우리는 두 가지 유형의 모델을 훈련시킵니다 - 하나는 전체 수정된 코드를 생성하는 모델(전체 모델)이고, 다른 하나는 버그가 있는 코드를 수정하는 데 필요한 코드 차이만을 생성하는 모델(diff 모델)입니다. 후자는 더 적은 토큰을 생성해야 하므로 더 빠르지만, 더 어려운 작업을 해결해야 합니다. 우리는 Databricks의 미세 조정 서비스를 사용하고 다른 학습률과 훈련 반복에 대해 스윕을 수행했습니다. 우리의 A/B 테스트 결과인