엔지니어링
Jan 30, 2024
엔지니어링
Backend.AI 와 Tool LLM 의 만남 : Tool 과 AI 의 협업 혁명 - 3부
Sergey Leksikov
머신러닝 연구원
Jan 30, 2024
엔지니어링
Backend.AI 와 Tool LLM 의 만남 : Tool 과 AI 의 협업 혁명 - 3부
Sergey Leksikov
머신러닝 연구원
- 1부. LLM 와 Tool 의 협업 소개
- 2부. Backend.AI 로 Gorilla LLM 모델 서빙하기
- 3부. 학습 및 서버 LLLM 없이 로컬에서 몇 줄의 코드만으로 자체 API 검색기 및 질문 답변 시스템을 만들기
3부. 학습 및 서버 LLLM 없이 로컬에서 몇 줄의 코드만으로 자체 API 검색기 및 질문 답변 시스템을 만들기
앞서 1부에서는 도구 LLM과 그 사용법에 대해 설명했습니다. 2부에서는 Backend.AI에서 Gorilla LLM을 실행하는 방법을 설명했습니다. 3부에서는 GPU를 사용할 수 없지만 API와 관련하여 도움과 지원을 받고자 하는 경우에 대해 이야기 해 보겠습니다.
우리에게 Backend.AI가 있고, 질문과 답변 방식을 통해 보다 인터랙티브한 방식으로 Backend.AI REST API 및 Functional API에 대한 정보를 얻고 싶다고 가정해 보겠습니다. REST API의 예는 이 문서에서 설명할 수 있습니다(https://docs.backend.ai/en/latest/manager/rest-reference/index.html).
그림 1. Backend.AI REST API 도큐먼트
추가적으로 Backend.AI REST API 설명서를 openapi.json 형식으로 내보낼 수 있습니다:
그림 2. Backend.AI openai.json
Another source of BackendAI API is functional API defined in Backend.AI Client. We want to know how to interact with Backend.AI and which parts of code are responsible. The client code repository is responsible with managing and interacting with cloud and computing environment:
Steps to make a Question Answering API system
- 로컬 PC 환경에서 https://github.com/lablup/backend.ai/tree/main/src/ai/backend/client 의 Backend.AI 클라이언트를 로컬로 설정하고 새 디렉토리
bai-dev/src/ai/backend/client/gpt_api_client
를 생성해 보겠습니다.
그림 3. gpt_api_client 디렉토리 위치
- vector_data 아래에 REST API 문서: openapi.json 을 저장할
data1/
그리고 API 질의응답 수행을 위해 선택된 B.AI 클라이언트 파일을 저장할data2/
두 개의 하위 디렉토리를 생성하겠습니다.
그림 4. openapi.json 및 클라이언트 함수 코드 파일이 포함된 데이터 디렉터리 개요
-
파이썬 라이브러리인 LlamaIndex 를 설치합니다.
Pip install llama-index
참고로 LlamaIndex 는 Meta 의 LLaMA 언어 모델과는 관련이 없습니다. LlamaIndex 는 검색을 위해 문서를 효율적으로 처리하고 저장하기 위한 데이터 구조 및 메서드와 관련이 있습니다. -
API와 코드 파일을 임베디드 벡터로 변환하고 LLamaIndex를 사용하여 벡터 데이터베이스에 저장해 보겠습니다. 로컬 PC에서 VSCode에 통합된 Jupyter Notebook 대화형 환경을 사용해 보겠습니다.
그림 5. 주피터 노트북 대화형 환경. data/ 디렉터리에서 openapi.json을 로드. 이후 쿼리 엔진에서 벡터 인덱스를 통해 질문.
- 코드 함수를 사용하여
data2/
디렉토리를 벡터화 합니다.
그림 6. B.AI 클라이언트의 코드 파일을 이용하여 data2/ 디렉토리 로딩. 인덱스로 벡터화 후 질답 엔진 생성.
객체를 저장하고 직렬화 하는데 일반적으로 사용되는 파이썬 Pickle 또는 Joblib 라이브러리를 사용하여 joblib.dump(index, "rest_api_index.joblib") 그리고 joblib.dump(index, "functional_index.joblib") 인덱스를 모두 저장하고 시스템에 로드가 가능합니다.
-
주피터 노트북 환경은 이미 대화형 방식으로 질문하고 답변을 받을 수 있는 기능을 제공하고 있습니다. 또한 저장된 벡터 인덱스를 FastAPI 서버에 불러와서 웹을 통해 질문에 답할 수 있습니다. 이전 2부에서는 Gorilla LLM으로 계산 세션을 설정했습니다. 이전 데모에서도 여전히 FastAPI 서버를 사용한 계산 세션이 있습니다.
-
Backend.AI 클라우드 세션에서 rest_api_index.joblib 및 functional_index.joblib 파일을 api_helper/ vFolder 로 전송 해 보겠습니다.
-
server.py 파일에서 벡터 인덱스를 로딩하고 쿼리 엔진을 정의합니다.
Figure 7. server.py 에서 인덱스 및 쿼리 엔진 파일 정의
- 각 쿼리 엔진에 대해 FastAPI 엔드포인트를 지정합니다.
그림 8. REST 및 함수형 API 검색을 위한 코드 스니펫
- curl 명령을 사용하여 로컬 PC에서 서버 응답을 테스트합니다. 특정 엔드포인트에서 서버가 쿼리를 받으면 사용자로부터 응답을 받습니다.
curl -X POST -H "Content-Type: application/json" -d '{"instruction":"Create a new session"}' http://127.0.0.1:8000/rest_api
그림 9. curl 명령의 응답. 예제 1
curl -X POST -H "Content-Type: application/json" -d '{"instruction":"Create a new session"}' http://127.0.0.1:8000/functional
그림 10. curl 명령의 응답. 예제 2
또한 사용자 입력을 받아 해당 엔드포인트로 전송하고 응답을 받는 웹 앱을 만들 수도 있습니다.
그림 11. Backend.AI REST 및 함수형 API를 통한 질문 답변을 위한 웹 앱 프로토타입. 예제 1
그림 12. Backend.AI REST 및 함수형 API를 통한 질문 답변을 위한 웹 앱 프로토타입. 예제 2
맺음말
3부에서는 오픈 소스 파이썬 라이브러리 LLamaIndex를 사용하여 로컬에서 질문-응답 시스템을 만드는 방법을 보여드리면서 문서와 Backend.AI 코드를 벡터 형식으로 변환하는 방법을 알아보았습니다. 질문과 답변은 Visual Studio Code 에서 플러그인을 통해 지원하는 주피터 노트북 환경에서 대화형 방식으로 수행할 수 있습니다. 또한 이러한 벡터 인덱스를 Gorilla LLM API 튜닝 모델이 서버로 있는 Backend.AI 클라우드 환경으로 옮기기로 결정했습니다. 그런 다음 네트워크를 통해 사용자를 지원하기 위해 API 질의응답 웹 앱을 구현했습니다.
참고 자료:
- LLama Index. https://docs.llamaindex.ai/en/stable/
Backend.AI API 도우미 및 Gorilla LLM 데모 동영상입니다:
- 1부. LLM 와 Tool 의 협업 소개
- 2부. Backend.AI 로 Gorilla LLM 모델 서빙하기
- 3부. 학습 및 서버 LLLM 없이 로컬에서 몇 줄의 코드만으로 자체 API 검색기 및 질문 답변 시스템을 만들기