4P by neo 14일전 | ★ favorite | 댓글 2개
  • 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가 추구해온 오픈소스 정신으로 함께 발전시키고 싶음
  • 사용자, 기여자, 팀원으로 누구나 함께할 수 있길 바라며, 더욱 멋진 미래를 열기 위해 달리는 중임
Hacker News 의견
  • Zed의 예측 편집 기능은 현재 무료지만, 나중에는 유료화될 가능성이 있음. 사용자는 가격이 정해지면 워크플로우에 통합할지 결정할 것임. 무료 체험을 원하지만, 가격이 비싸면 사용하지 않을 것임
    • Zed는 파일 유형당 하나의 LSP만 실행 가능함. Rust와 C++는 잘 작동하지만, Angular는 그렇지 않음
    • 원격 편집 기능은 Windows에서 작동하지 않음. Windows에서 원격 편집 기능을 사용하려면 SSH 지원이 필요함
  • 예측 기능이 너무 과도하게 사용되고 있음. 사용자는 예측 기능이 방해가 된다고 느끼며, 자신의 작업 흐름을 방해한다고 생각함
    • 예측 기능이 너무 많이 사용되면 오히려 도움이 되지 않음. 알고리즘이 사람의 생각을 읽을 수 없으므로, 사용자의 작업을 방해하지 않도록 해야 함
  • 코드가 제3자에게 전송되는 것을 원하지 않음. 특히 비밀 파일을 편집할 때, 개인 키나 API 키가 전송될 수 있음
    • 로컬 옵션이 제공되기를 바람
  • Zed의 새로운 기능 광고 방식이 마음에 듦. 상단 왼쪽에 배너로 표시되며, 사용자의 작업을 방해하지 않음
    • 다른 소프트웨어처럼 사용자가 새로운 기능을 확인하도록 강요하지 않음
  • Zed는 주석 자동 완성을 시도함. 사용자는 주석 부분에서 자동 완성을 원하지 않으며, 이를 비활성화할 수 있는 옵션이 추가됨
  • CoPilot의 제안 수락 인터페이스가 불편함. 탭 키를 사용하면 원치 않는 AI 제안이 많이 나옴
  • 텍스트 에디터에서 안정성을 선호함. AI 관련 기능이 많으면 오히려 불편함
    • Zed를 사용해보니 좋았음
  • 현대 Intellisense는 적절한 예측 기능을 제공함. AI 예측은 너무 과도하게 사용됨
    • AI가 프로그램 구조와 패턴 추천을 제공하면 유용할 것임. 프로그램이 커질수록 구조화하기 어려워짐
  • Zed의 기능을 로컬에서 사용하기 위한 모델 파일을 정의할 수 있음. 하지만 Zed가 이 기능의 엔드포인트를 변경할 수 있는지는 불확실함