이번에는 Langserve와 ollama에 올린 모델을 연결해본다.
Langserve란, 공식 문서에 따르면 Langchain의 체인들을 REST API로 쉽게 배포할 수 있도록 도와주는 라이브러리이다.
테디노트님의 영상을 보고 따라만드는 중인데,
이 app폴더를 어떻게 만드는지에 대해 따로 말씀이 없으셔서,
나는
pip install -U langchain-cli
langchain app new app
이 코드를 실행해서 app을 새로 만들었더니
이렇게 폴더 내 파일들이 자동으로 생성되었다.
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도 제공해주는 것도 확인했다.
뉴진스는 학습 안된건가..
ollama에 올린 내 로컬에 있는 모델을 다른 사람들도 서버를 통해 사용할 수 있도록 하려면 langserve의 remoterunnable 클래스와 ngrok을 이용하면 된다.
from langserve import RemoteRunnable
chain = RemoteRunnable("http://localhost:8000/prompt/c/N4XyA")
그런데, 난생 처음 ngrok을 이용할 경우,,,,
ngrok http --domain=도메인명 8000
누군가가 도메인명으로 접속하면 내 로컬호스트의 8000번 포트로 연결이 된다는 뜻!
6. 주소창에 도메인명을 입력하고 접속한다.
그럼...원래는 localhost:8000의 langserve 화면이 보여야하는데..
나는 이렇게 떳다.
에러의 원인은 web 서버가 구동되지 않고 있기 때문이었다.
다시 얼른 python3 server.py 실행하면..
요로코롬 잘 나오는 걸 확인할 수 있다.
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파일 업로드하는 기능 어떻게 구현하는지도 알아봐야겠다.이상.