용바오의 연구실

JGI (Jaypyon General Intelligence)

現職でLLMエンジニアとして感じたことを率直に書いてみる (LLM 엔지니어링을 하며 느낀점)

現職でLLMエンジニアとして感じたことを率直に書いてみると、

今年1月末に社内で新技術に関するPoCを行う組織が設立され、その部署に異動となりました。

社内では誰も私たちに期待しておらず、「すぐに無くなるチーム」という認識が非常に強かったです。

しかし、非常に優れたリーダーと同僚のおかげで、金融業界初のタイトルを掲げてGPTストアにOpen APIを連携したサービスを立ち上げることができました。

技術スタックとしてはそれほど優れたものは必要なかったのですが、誰も期待していなかったチームから「何か」が生まれました。

その後、内部ネットワークでサービス可能なAIベースの業務自動化サービスを立ち上げることにしました。

4月初め、ついに夢に見たGPUを受け取り、オープンソースをセットアップしました。

(ネットワークがサポートされない状況でのオープンソースセットアップは本当に二度とやりたくないほど大変な作業でした;;;)

その後、私は自分ができることを増やしていきました。

最初は単純に他人が作ったオープンソースを使ってみることから始め、次第に

「良いGPUなのにトークン生成が遅すぎる」、「必ず方法があるはずだ」といった悩みを抱えながら成長し始めました。

推論速度を飛躍的に向上させるには、一般的に考えられるのはキャッシュです。

調べてみると、ありました。KV Cache / Page Attentionという方法があり、運良くその実装もありました。

Aphrodite Engine、VLLMを初めて導入した時、プロジェクトの成功を確信しました。

その後、推論速度は良くなり、かなり賢くなりました。

ただ、一つが解決すると、他のことも向上させたいという欲求が誰にでもあると思います。

「社内文書を参照させる方法はないか?」「もう少し韓国語がうまくできないか?」「もう少しだけ…数理能力を向上させられないか?」

市販されている方法は多く、その中でRAGという方法があり、迅速に習得し、Elastic Searchの導入およびNoriプラグインを活用したハイブリッド検索をAWSのOpenSearch実装を参考にして実現しました。

韓国語をもっと上手にするために、直接AIでデータセットを作成し、SFTを行いました。ファインチューニングは非常に難しそうに見えましたが、大学時代に触れたTensorflowやResNetに比べると、すでに非常に良くできたオープンソースが多かったので、むしろ簡単でした。

そんな日々を送りながら、社内で実際に適用可能なユースケースを発掘し、開発しました。

トークンの推論速度はさらに向上させました。GPTQで量子化し、Marlinでさらに向上させました。

最も大変なのは、実際に開発する時間と勉強する時間が非常に不足していることです。

我々のチームはチームリーダーを含めてたった3人の非常に小さなチームで、文書作業が本当に多いです...;;

ほぼ毎日残業しているのに終わらないような感じです。FastAPI、Uvicorn、Non-BlockingのようなPythonに依存した概念から、オープンソースベースのElasticSearch、PostgreSQL、ストレージの性質を持つS3、boto3、LLM...

最近興味を持ち始めた分野はモデルの進化論的な統合(モデルの交配)ですが、これはSakana AIでよく使われる手法です。

Bllossomという韓国語で「フルファインチューニング」と「主張」するモデルを基本的なインストラクトモデルと混ぜて何度もテストしましたが、Bllossomは本当にひどいモデルだったので;;;;うまくいかなかった記憶があります。

来週はさらに多くのモデルを混ぜてみる予定です。


현 직장에서 LLM Engineer를 하면서 느낀점들을 가감없이 써보자면

지난 1월 말 신기술에 대해서 PoC하는 조직이 사내에 생겼고, 그 부서로 인사이동을 가게 되었어요.

사내 아무도 우리에게 기대하지 않았고, "곧 없어질 팀"이라는 인식이 굉장히 강했어요.

하지만 정말 뛰어난 리더와, 동료 덕분에 금융권 최초의 타이틀을 걸고 GPT Store에 Open API를 연동한 서비스를 런칭하였고,

기술 스택으로 보면 그렇게 뛰어난 것이 필요하진 않았지만, 아무도 기대하지 않던 팀에서 "Something"이 나오게 되었습니다.

그 뒤로 내부망에서 서비스 가능한 AI기반의 업무 자동화 서비스를 런칭하고자 하였고,

4월 초, 드디어 꿈에 그리던 GPU를 받아서 오픈소스를 세팅했습니다.

(네트워크가 지원되지 않는 상황에서의 오픈소스 세팅은 정말 다시 하고싶지 않을 정도로 힘든 작업이었습니다;;;)

그 후로 저는 제가 할 수 있는 것들을 늘려갔어요.

처음엔 단순히 남이 만든 오픈소스를 가져와서 돌려보는 것부터 시작했고, 점차

"좋은 GPU인데 너무 느리게 토큰을 생성한다.", "분명 방법이 있을 것이다."와 같은 고민을 하면서 성장하기 시작했어요.

추론 속도를 비약적으로 늘리려면, 일반적으로 생각하는 건 Cache입니다.

찾아보았고, 있었어요. KV Cache / Page Attention이라는 방식이 그 기법이었고, 정말 운 좋게도, 그 구현체도 있었어요.

Aphrodite Engine, VLLM을 처음 도입했을 때, 저는 프로젝트의 성공을 확신했습니다.

이후에는 이제 추론속도는 좋았고, 꽤나 똑똑했습니다.

다만 하나가 해결되면 다른 것들도 향상시키고 싶은 욕심이 누구에게나 있다고 생각합니다.

"사내 문서를 참조하게 하는 방법이 없을까?" "조금 더 한국어를 잘 할 수는 없나?" "조금만 더... 수리력을 키울 수는 없을까?"

시중에 나와있는 방법이 많았습니다. 그 중 RAG라는 방법이 있었고, 빠르게 습득했고, Elastic Search의 반입 및 Nori 플러그인을 활용한 Hybrid Search를 AWS의 OpenSearch 구현체를 뜯어보며 구현했어요.

한국어를 더 잘하게 하기 위해서, 직접 AI로 데이터셋을 만들었고, SFT를 진행했습니다. 파인튜닝이라는 게 정말 어려워 보였는데, 대학 때 접했던 Tensorflow, ResNet에 비하면 이미 정말 잘 만들어진 오픈소스들이 많아서 오히려 쉬웠어요.

어느덧 이런 나날들을 보내고, 사내에서의 실제 업무에 적용 가능한 Use Cases를 발굴했고, 개발했습니다.

토큰의 추론 속도는 더 높였어요. GPTQ로 Quantize하고 Marlin으로 더욱 향상 시켰거든요.

가장 힘든 건, 실제 개발할 시간과 공부할 시간이 너무 부족하다는 거.

우리 팀은 팀장을 포함해도 총 3명인 정말 작은 팀이고

문서작업이 정말 많네요...;;

거의 매일같이 야근을 하는데도 끝나질 않는 거 같아요. FastAPI, Uvicorn, Non-Blocking과 같은 Python에 종속된 개념들부터, 오픈소스 기반의 ElasticSearch, PostgreSQL, 스토리지 성격의 S3, boto3, LLM ...

최근에 재미를 붙인 분야는 모델의 진화론적 병합 (모델의 교배)인데요, Sakana AI에서 즐겨 쓰는 기법입니다.

Bllossom이라는 한국어로 "풀 파인 튜닝"되었다고 "주장"하는 모델을 기본 인스트럭트 모델과 섞어서 여러번 테스트해봤는데, 블로썸이 워낙 똥덩어리라 ;;;;;; 잘 안되었던 기억이 있네요.

다음주는 더 많은 모델들을 섞어볼 예정입니다.