Skip to main content
QUICK REVIEW

[논문 리뷰] RAPGen: An Approach for Fixing Code Inefficiencies in Zero-Shot

Spandan Garg, Roshanak Zilouchian Moghaddam|arXiv (Cornell University)|2023. 06. 29.
Software System Performance and Reliability인용 수 5
한 줄 요약

RAPGen은 과거 수정 사례의 지식 기반에서 성능 버그 수정 지침을 검색하고, 이를 활용해 대규모 언어 모델(Large Language Models, 예: Codex)을 위한 효과적인 프롬프트를 생성하는 제로샷 프롬프트 엔지니어링 기법이다. 이는 약 60%의 경우에서 개발자 수준의 수정 품질을 달성하고, 약 39%의 경우에서 그대로 동일한 수정을 생성하여 피지컬 트레이닝이나 규칙 기반 시스템의 필요성을 크게 줄인다.

ABSTRACT

Performance bugs are non-functional bugs that can even manifest in well-tested commercial products. Fixing these performance bugs is an important yet challenging problem. In this work, we address this challenge and present a new approach called Retrieval-Augmented Prompt Generation (RAPGen). Given a code snippet with a performance issue, RAPGen first retrieves a prompt instruction from a pre-constructed knowledge-base of previous performance bug fixes and then generates a prompt using the retrieved instruction. It then uses this prompt on a Large Language Model (such as Codex) in zero-shot to generate a fix. We compare our approach with the various prompt variations and state of the art methods in the task of performance bug fixing. Our evaluation shows that RAPGen can generate performance improvement suggestions equivalent or better than a developer in ~60% of the cases, getting ~42% of them verbatim, in an expert-verified dataset of past performance changes made by C# developers.

연구 동기 및 목표

  • 비용이 많이 드는 피지컬 트레이닝이나 규칙 기반 시스템에 의존하지 않고도, 감지하기 어려운 비기능적 문제이자 전문 지식이 필요한 성능 버그를 수정하는 데 도전하는 것.
  • 전용 모델을 훈련시키는 대신 프롬프트 엔지니어링을 활용해 성능 버그 수정 도구의 유지보수 비용을 줄이고 일반화 능력을 높이는 것.
  • 과거 수정 패턴의 지식 기반을 구성함으로써 사전 훈련된 LLM을 활용해 제로샷, 확장 가능하고 스케일링 가능한 성능 수정 생성을 가능하게 하는 것.
  • 역사적 성능 수정 사례에서 효과적인 지시 템플릿을 검색하고 재사용함으로써 수정 품질을 향상시키고 수동 프롬프트 작성에 대한 의존도를 줄이는 것.

제안 방법

  • RAPGen은 과거 성능 버그 수정 사례의 지식 기반을 구축하여, 버그가 발생한 API 사용 방식과 해당하는 수정 지침을 자연어로 추출한다.
  • 버그가 발생한 코드 스니펫과 비효율적인 라인 번호가 주어지면, RAPGen은 의미적 유사도를 기반으로 지식 기반에서 가장 관련성이 높은 수정 지침을 검색한다.
  • 버그가 발생한 메서드, 검색된 지침을 주석으로 삽입한 것, 그리고 메서드 서명을 조합하여 프롬프트를 구성함으로써 LLM이 정확한 수정을 생성하도록 이끈다.
  • 그 후 이 프롬프트는 Codex와 같은 사전 훈련된 LLM에 제로샷 설정에서 입력되어 코드의 성능 최적화된 버전을 생성한다.
  • 이 방법은 피지컬 트레이닝을 피하고, 새로운 성능 문제에 동적으로 대응할 수 있도록 검색 기반 프롬프트 생성에 의존한다.
  • 이 방법은 개발자 검증 데이터셋 기반의 C# 성능 수정 사례에 대해 평가되었으며, RAPGen의 출력 결과를 인간이 작성한 수정 사례와 비교하였다.

실험 결과

연구 질문

  • RQ1검색 기반 프롬프트 생성은 제로샷 설정에서 LLM이 생성하는 성능 버그 수정의 정확성과 관련성에 어떻게 기여하는가?
  • RQ2RAPGen의 성능은 DeepDev-PERF와 같은 최신 기술 모델과 비교해 어떻게 되는가? 특히 정확하고 효율적인 코드 수정 생성 능력에서 어떤가?
  • RQ3과거 수정 지침의 지식 기반을 통해 피지컬 트레이닝 없이도 프롬프트 품질과 수정 효과성은 어느 정도 향상될 수 있는가?
  • RQ4프롬프트에 특정 버그가 발생한 라인을 포함시키는 것이 전체 메서드만 제공하는 방법보다 더 나은 수정 제안을 이끌어내는가?

주요 결과

  • 전문가가 검증한 C# 성능 변경 사례 데이터셋에서 RAPGen은 약 60%의 경우에서 개발자 수준의 수정과 동일하거나 더 나은 결과를 도출한다.
  • 약 39%의 경우에서 개발자 수정과 정확히 일치하는 결과를 생성하여 인간의 의도와 강한 일치를 보인다.
  • 특히 제로샷 환경에서, RAPGen은 DeepDev-PERF 및 기타 베이스라인 모델보다 정확한 단일 메서드 성능 수정을 더 잘 생성한다.
  • 특정 수정 지침을 검색하고 프롬프트에 삽입하는 것은 일반적 또는 수동으로 작성한 프롬프트보다 수정 품질을 크게 향상시킨다.
  • RAPGen의 제로샷 설계 덕분에 모델 피지컬 트레이닝이 필요로 하지 않으며 유지보수 오버헤드도 감소해 다양한 언어와 버그 유형에 걸쳐 스케일링이 가능하다.
  • 이 방법은 효과적인 프롬프트 엔지니어링이 피지컬 트레이닝된 종단 간 모델과 맞먹거나 뛰어나게 성능 버그 수정에 활용될 수 있음을 보여주며, 특히 과거 수정 사례의 정제된 지식 기반에 기반할 경우 더욱 그렇다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.