# Varco Arena 바르코 아레나는 테스트셋 명령어별로 비교할 모델들의 토너먼트를 수행하여 정확하게 모델들의 순위를 매깁니다. 이것은 reference 아웃풋과 비교하여 승률을 매기는 방법보다 정확하며 조금 더 저렴합니다. 더 자세한 내용에 대해서는 아래의 링크를 참조하시면 됩니다. * [논문](https://huggingface.co/papers/2411.01281) * [엔씨소프트 테크블로그 (KR)](https://ncsoft.github.io/ncresearch/12cc62c1ea0d981971a8923401e8fe6a0f18563d) ## Quickstart ### 로컬에서 스트림릿 앱으로 시작하기 (추천!) ```bash git clone [THIS_REPO] # install requirements below. we recommend miniforge to manage environment cd streamlit_app_local bash run.sh ``` 더 자세한 내용은 `[THIS_REPO]/streamlit_app_local/README.md` 을 참조하세요! ### CLI 사용 * cli와 웹 앱은 서로 같은 코드를 활용하며, 아래의 디렉토리에 있습니다. * `varco_arena/` * vscode 상에서 디버깅을 위한 프리셋 프롬프트별 테스트 명령어는 다음 파일에 적혀있습니다. * `varco_arena/.vscode/launch.json` ```bash ## gpt-4o-mini as a judge python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -m tournament -e "gpt-4o-mini" ## vllm-openai served LLM as a judge python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -e SOME_MODEL_NAME_SERVED -m tournament -u "http://url_to/your/vllm_openai_server:someport" # dbg lines ## openai api judge dbg python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini ## other testing lines python main.py -i "rsc/inputs_for_dbg/[SOME_DIRECTORY]/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini ## dummy judge dbg (checking errors without api requests) python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e debug ``` ## Requirements `python = 3.11.9` 상에서 테스트 함. `requirements.txt` ``` openai>=1.17.0 munch pandas numpy tqdm>=4.48.0 plotly scikit-learn kaleido tiktoken>=0.7.0 pyyaml transformers streamlit>=1.40.2 openpyxl fire==0.6.0 git+https://github.com/shobrook/openlimit.git#egg=openlimit # do not install this by pypi # Linux인 경우 uvloop # Windows인 경우 winloop ``` #### Argument - -i, --input : 입력 파일 or 디렉토리 or 파일명에 대한 정규 표현식 - -o, --output_dir : 출력 파일이 저장되는 디렉토리 - -e, --evaluation : 평가 모델 (e.g. "gpt-4o-2024-05-13", "gpt-4o-mini", vllm에서 띄운 모델 명 등) - -m, --matching_method: 매치 방식 (기본값 "tournament", "league" (비추천) ) - -k, --openai_api_key : OpenAI API Key - -u, --openai_url: 로컬 vLLM OpenAI 서버 사용 시 URL(ip주소+포트) #### advanced - -j, --n_jobs : asyncio.semaphore()에 전달될 인자. Arena가 진행되지 않는다면 기본값인 32 이하로 내려보자 - -p, --evalprompt : [해당 디렉토리 참조](./varco_arena/prompts/*.yaml) - -lr, --limit_requests : vLLM OpenAI 서버 요청 제한 (default: 7,680) - -lt, --limit_tokens : vLLM OpenAI 서버 토큰 제한 (default: 15,728,640) #### Input Data Format [input jsonl 가이드 링크](./streamlit_app_local/guide_mds/input_jsonls_kr.md) ## Contributing & Customizing #### git clone 및 dependency 설치 후에 할 일 ```bash pip install pre-commit pre-commit install ``` #### commit 하기 전에 할 일 ```bash bash precommit.sh # 이게 코드들을 다 리포맷해줄거임 ``` 문의: 손선일 * 내가 만든 프롬프트를 사용하고 싶어요 * [`./varco_arena/prompts/`](./varco_arena_core/prompts/__init__.py) 에선 각종 프롬프트 클래스 및 `yaml` 파일 형태로 정의된 프롬프트를 로드합니다. 프리셋을 참조하여 작성하시면 됩니다. * 테스트셋 별로 다른 평가 프롬프트를 사용하고 싶어요 (e.g. 작업에 따라 다른 프롬프트를 사용하고 싶어요) * 위 걸어드린 링크의 `load_prompt` 를 통해서 `promptname` + `task` 형태로 [`./varco_arena_core/manager.py:async_run`](./varco_arena_core/manager.py) 프롬프트가 로드되도록 해놓았습니다. * 제가 사용하고 싶은 입력파일에 `instruction`, `source`, `generated` 이외에 다른 필드를 추가해서 사용하고 싶어요. * 조금 복잡해지는데 다음 부분을 고쳐주세요 * `varco_arena/eval_utils.py` 에서 `async_eval_w_prompt` 부분을 손봐야할 수 있습니다 (여기에서 PROMPT_OBJ.complete_prompt()을 호출함) * 그 외 연관된 부분은 타고타고 고쳐주셔야... ## Special Thanks to (contributors) - 이민호 (@대화모델팀, NCSOFT) [github](https://github.com/minolee/) - query wrapper - rag prompt - 오주민 (@생성모델팀, NCSOFT) - overall prototyping of the system in haste ## Citation 저희 작업물이 도움이 되었다면 저희도 도움을 받아볼 수 있을까요?😉 ``` @misc{son2024varcoarenatournamentapproach, title={Varco Arena: A Tournament Approach to Reference-Free Benchmarking Large Language Models}, author={Seonil Son and Ju-Min Oh and Heegon Jin and Cheolhun Jang and Jeongbeom Jeong and Kuntae Kim}, year={2024}, eprint={2411.01281}, archivePrefix={arXiv}, primaryClass={cs.CL}, url={https://arxiv.org/abs/2411.01281}, } ```