나만의 LLM 호스팅 따라하기 (2) Langserve편

My Space·2024년 4월 24일
2

이번에는 Langserve와 ollama에 올린 모델을 연결해본다.
Langserve란, 공식 문서에 따르면 Langchain의 체인들을 REST API로 쉽게 배포할 수 있도록 도와주는 라이브러리이다.

1. langserve를 위한 폴더 만들기

테디노트님의 영상을 보고 따라만드는 중인데,

이 app폴더를 어떻게 만드는지에 대해 따로 말씀이 없으셔서,
나는

pip install -U langchain-cli

langchain app new app

이 코드를 실행해서 app을 새로 만들었더니

이렇게 폴더 내 파일들이 자동으로 생성되었다.

2. app 폴더 내에서 server 구동하기

python3 server.py

server.py 내부 코드를 지금 다 뜯어보진 못했다.. 일단 튜토리얼 따라 킵고잉하고, 다시 돌아와 찬찬히 보도록 하겠다.

위 코드 실행하면, 로컬호스트에 호스팅된다.

요로코롬!

그런데, 프롬프트 하나 날렸는데, 끊임없이 답변이 이어져서 ctrl+c로 서버를 중단했다. 이게 왜 비정상적인 오류인지 모르겠다. 모델 작동중에 중지해서 그런가.. 아무튼 비정상적으로 중지되어 다시 python3 server.py 했더니

ERROR:    [Errno 98] error while attempting to bind on address ('0.0.0.0', 8000): address already in use

이 에러가 떴다....

또 구글링하다가 비정상적으로 종료된 서버를 종료시키면 된다는 해결방법을 찾아 아래 코드로 진행했다.

sudo lsof -i :8000
sudo kill -9 PID명

그리고 다시 서버 구동하면 된다.

Langserve가 대화형태의 GUI도 제공해주는 것도 확인했다.

뉴진스는 학습 안된건가..

3. RemoteRunnable과 ngrok으로 모델 포트포워딩하기

ollama에 올린 내 로컬에 있는 모델을 다른 사람들도 서버를 통해 사용할 수 있도록 하려면 langserve의 remoterunnable 클래스와 ngrok을 이용하면 된다.

  • 로컬호스트 주소의 경우
from langserve import RemoteRunnable
chain = RemoteRunnable("http://localhost:8000/prompt/c/N4XyA")
  • ngrok을 이용할 경우

그런데, 난생 처음 ngrok을 이용할 경우,,,,

  1. ngrok 공식 문서에서 설치 명령어 복사해서 설치하기
  2. ngrok 메뉴바의 (Your AuthToken) 메뉴로 들어간다.
  3. 아래의 개인 인증토큰을 명령창에 최초 등록한다.
  4. 무료 도메인 생성한다.
  5. 명령창에 아래 명령어 입력하면, 포트포워딩이 된다!
ngrok http --domain=도메인명 8000


누군가가 도메인명으로 접속하면 내 로컬호스트의 8000번 포트로 연결이 된다는 뜻!
6. 주소창에 도메인명을 입력하고 접속한다.
그럼...원래는 localhost:8000의 langserve 화면이 보여야하는데..

나는 이렇게 떳다.

에러의 원인은 web 서버가 구동되지 않고 있기 때문이었다.
다시 얼른 python3 server.py 실행하면..

요로코롬 잘 나오는 걸 확인할 수 있다.

ngrok 도메인과 langchain remoterunnable 클래스 연결

from langserve import RemoteRunnable
chain = RemoteRunnable("https://pika-innocent-terrier.ngrok-free.app/prompt/")

이렇게 ngrok의 도메인만 넣어주면, GPU가 없는 컴퓨터에서도 도메인을 통해 LLM에 접근하여 사용할 수 있도록 만들어주는 것이 바로 Remoterunnable이다! 그럼, 이 때 llm을 구동하는 gpu는 바로 localhost의 컴퓨터 gpu이다.

다음 포스트에서는 테디노트님 튜토리얼처럼 RAG까지 진행해보도록 하겠다. 다만 Embedding을 무료인 임베딩으로 바꾸어야하고, streamlit을 설치하는 것도 찾아봐야한다. 또, 난 pdf가 아니라 csv파일을 갖고 있기 때문에 streamlit에 csv파일 업로드하는 기능 어떻게 구현하는지도 알아봐야겠다.이상.

profile
기회가 올 때까지 나아가자

0개의 댓글