- Zed는 속도를 위해 설계된 편집기로, 항상
instant
한 편집 경험을 목표로 해왔음
-
instant
보다 더 빨라지기 위해, 사용자의 "다음 편집 동작을 예측"하는 방식을 채택
- 이를 위해 Zed는 새롭게 edit prediction 기능을 공개했고, 이는 Zeta라는 오픈 소스 모델을 기반으로 동작함
- 사용 중에
tab
키로 예측된 편집을 바로 적용할 수 있으며, 여러 후속 편집도 연속으로 실행 가능함
- 많은 요청을 받은 기능이며, 최대한 자연스럽게 Zed 편집 환경과 어우러지도록 개발됨
- 현재 퍼블릭 베타 기간 동안 Zed를 다운로드해 GitHub 계정으로 로그인하면 무료로 Zeta를 이용 가능함
- 다만 edit prediction은 추후 무료가 아닐 수도 있으나, 지금은 함께 실험하고 배우기 위해 공개 중임
Thoughtful Integration
- edit prediction 기능이 추가되면서
tab
키가 강력해졌음
- 하지만 기존에
tab
으로 들여쓰기를 하거나, 언어 서버(LS)에서 제공하는 제안사항을 확인하는 사용 방식과 충돌할 수 있음
- 언어 서버에서 제공하는 코드 제안이 보이면,
option
/alt
키를 눌러야 비로소 예측 편집이 미리보기로 표시됨
- macOS에서는
tab
으로 예측 편집을 확정할 수 있고, option
을 해제하면 원래 언어 서버 제안 화면으로 돌아옴
- Linux에서
alt-tab
이 윈도 매니저에 예약된 경우가 많아, 기본값으로 alt-l
을 제공함
- Linux 환경에서
alt-tab
이 충돌되지 않는다면 그대로 사용 가능함
Introducing Zeta: Zed's Open Source Edit Prediction Model
-
Zeta는 Qwen2.5-Coder-7B를 기반으로 개발된 오픈 소스 모델임
- 오픈 데이터셋(링크)도 공개 중임
- 오픈 소스 저장소에서 작업하는 경우, Zeta 향상을 위해 데이터셋에 기여해 주길 희망함
- 초기에는 안전과 프라이버시 검토를 거친 뒤 데이터가 반영될 예정임
- 함께 노력해 edit prediction을 전반적으로 더 나은 기능으로 만들고자 함
- 영상 링크: How Zed’s Open-Source Edit Predictions Work
Editing By Rewriting
- 대부분의 코딩 모델은 “fill in the middle” 방식으로 학습함
- prefix와 suffix를 주고, 그 사이를 모델이 생성하는 구조임
- 한편 Zeta는 임의 위치의 편집을 예측해야 해서 기존 구조와 맞지 않는 과제임
- 모델이 세밀한 단위의 변경보다는 비교적 큰 코드 덩어리 재작성에 능숙하다는 점에 주목함
- 그래서 최근 편집 이력과 커서 위치를 입력받아, 해당 코드 조각을 재작성하는 방식을 택함
Evaluating Predictions
- 대형 언어 모델의 결과는 매번 동일하게 나오지 않을 수 있어, 테스트가 까다롭다는 문제점이 있음
- 온도(
temperature
)를 0으로 설정하거나, RNG 시드를 지정해 변동을 어느 정도 제어할 수 있음
- 하지만 코드라는 것은 여러 정답이 가능해서, 결과가 기대 답안과 달라도 올바를 때가 있음
- 전통적 단위 테스트가 어려워서, 더 큰 LLM을 활용해 Zeta의 결과를 자연어로 검사하는 방식을 시도함
- 예: “왼쪽과 오른쪽 배열에 대해 재귀적으로 quicksort 함수를 호출하는지”와 같은 요구사항을 두고, Claude가 의도에 부합하는지 판별하도록 만듦
Prompt Engineering
- 처음에는 Qwen2.5-Coder-32B 모델을 사용해, 어떤 편집을 예측해야 하는지 명확히 지시하는 프롬프트를 구성함
- 초기 몇 개의 테스트(eval)는 통과했으나, 테스트가 늘어날수록 프롬프트만 변경해서는 일관된 결과를 내기 어려워짐
- 32b 모델은 응답 지연이 커서, Zed의 엄격한 성능 기준에도 맞지 않았음
Supervised Fine-Tuning
- 여러 접근을 시도한 끝에, Unsloth와 LoRA를 이용한 감독학습(fine-tuning)으로 전환함
- 최근 편집 이력에서 사용자가 원하는 변화를 추론하고, 코드 조각을 부정확한 삽입 없이 잘 작성하도록 가르치는 목표임
- 하지만 초기에는 실제 사용자 데이터가 부족해, Claude를 통해 50개 정도 합성 예시를 만들어 데이터셋에 추가함
- 이후 초기 버전을 Zed에 기능 플래그로 배포해, 내부 팀이 실제 사용 예시를 생성해 데이터셋을 확대함
- 약 400개 예시로 모델 정확도를 높였으나, 파일 일부 구간만 편집할 때 모델이 불필요한 변경을 가하는 문제가 남아있었음
Direct Preference Optimization
- 이 문제 해결을 위해 DPO(Direct Preference Optimization) 기법을 도입함
- 단순히 ‘좋은 예시’를 보여주는 것뿐 아니라 ‘피해야 할 예시’도 명시하며, 모델이 부적절한 편집을 구분하도록 학습함
- 약 150개의 주의 깊게 선정된 예시만으로도 까다로운 사례에서 모델 동작이 크게 향상됨
- 더 다양한 예시를 수집하면 추가 개선이 가능할 것으로 기대함
Minimizing Latency: Speculative Decoding
- Zed의 모든 기능과 마찬가지로, edit prediction에서도 지연(레이턴시)을 최소화하는 것이 핵심임
- p50이 200ms 이하고, p90이 500ms 이하가 목표임
- 코드 일부를 재작성하려면 생성해야 할 토큰 수가 많아져, 일반적인 fill-in-middle 방식보다 느릴 수 있음
- 그러나 rewrite 과정에서 원본 코드와 상당히 비슷한 부분이 많다는 점을 활용해, speculative decoding 기법을 적용함
- 입력을 참조해 n-gram 검색으로 병렬 토큰 생성을 진행, 품질 저하 없이 속도를 높이는 전략임
Minimizing Latency: Serving The Model
- 모델 추론 속도 외에도 서버 환경에서의 모델 제공(Serving) 방식이 큰 과제였음
- 지금까지 팀이 수행해온 것 중 가장 많은 연산량이 필요한 문제임
- 런칭 시점에 짧은 검증 과정을 거쳐 Baseten을 선택함
- Baseten 엔지니어들이 Zeta 모델을 최적화해 주었고, 원하는 지연 기준을 달성했음
- 네트워크 전송 시간도 주요 요인이므로, 미국과 유럽 지역에 GPU를 배치해 물리적으로 가까운 위치에서 요청을 처리함
-
Cloudflare Workers를 통해 사용자와 가까운 데이터 센터에서 요청을 중계함
Conclusion
- 앞으로 edit prediction을 더 강력하게 만들 다양한 방향을 탐색할 예정임
- 모델이 받는 컨텍스트 양을 늘리고, 추가 fine-tuning을 진행하며, Zeta 데이터셋을 확장해 개선해 나갈 계획임
- 작년 가을 Zed AI를 출시한 이후로 많은 것을 배웠음
- 세상이 빠르게 바뀌는 만큼, 사용자들이 사랑할 만한 기능을 지속적으로 실험하고 구축 중임
- AI도 Zed가 추구해온 오픈소스 정신으로 함께 발전시키고 싶음
- 사용자, 기여자, 팀원으로 누구나 함께할 수 있길 바라며, 더욱 멋진 미래를 열기 위해 달리는 중임