ChatGPT, Amazon Bedrock, Google Bard와 같은 서비스를 사용하는 대신 로컬에서 챗봇을 실행하는 데 사용할 수 있는 여러 오픈 소스 대형 언어 모델이 있으며 GPT4ALL이 그러한 옵션 중 하나입니다.
이로 인해 AWS Lambda 함수 내에서 LLM을 실행할 수 있는지 궁금해졌습니다. 이는 일반적으로 작고 실행 속도가 빠른 이벤트 기반 기능입니다. 복잡한 처리 작업에 사용하기 위한 것은 아니지만 규모를 0으로 조정하고 사용한 만큼만 비용을 지불하면 됩니다. Lambda 함수 내에 LLM을 갖는 것은 재미있는 실험이자 장기 실행 프로세스가 필요하지 않은 호스팅 모델을 갖는 방법인 것 같습니다.
이 리포지토리에는 컨테이너 이미지를 사용하여 사용자 지정 런타임 AWS Lambda 함수를 생성하는 코드가 포함되어 있습니다. 테스트를 위해 Docker 내부에서 로컬로 실행할 수도 있습니다. 이 함수에는 전체 LLM 모델과 모델을 사용하는 코드가 포함되어 있어 HTTP 호출에서 기본 텍스트 생성이 가능합니다.
이는 다음을 사용합니다:
GPT4ALL 모델을 다운로드하세요. 이를 위해 gpt4all-falcon-newbpe-q4_0.gguf를 사용했습니다. 응답이 좋은 작은 모델(4GB...)이기 때문입니다. 다른 모델도 작동하지만 Lambda 메모리 제한에 맞을 만큼 작아야 합니다.
bin
파일을 function
폴더의 Lambda_function.py 파일 옆에 배치합니다.
docker를 사용하여 이미지를 빌드합니다: docker build --platform linux/amd64 -t makgpt:test1
.
일단 빌드되면 로컬로 실행할 수 있습니다: docker run -p 9000:8080 makgpt:test1
실행한 후에는 다른 터미널 창에서 이에 대해 호출을 실행할 수 있습니다(예: curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"body":"{"action":"Set fire to a tree"}"}'
AWS 계정 내의 ECR에 이미지를 푸시합니다. 이를 위해서는 개발자 가이드의 Deploying the image
아래에 있는 AWS 가이드를 따를 수 있습니다. 간단한 단계는 다음과 같습니다:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
docker tag docker-image:test :latest
docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
이 이미지에서 Lambda 함수를 생성하여 충분한 메모리(10GB 권장)와 최소 5분의 제한 시간을 제공합니다.
단순화를 위해 Lambda 함수에 함수 URL을 제공하고 HTTP를 통해 이를 조회할 수 있습니다.
그런 다음 다음과 같은 URL을 사용하여 시도해 볼 수 있습니다. curl "https://INSERTHERE.lambda-url.us-east-1.on.aws/" -d '{"body":"{"action":"Set fire to a tree"}"}'
이 기능은 다음과 같은 프롬프트가 포함된 기본 텍스트 어드벤처 게임으로 준비되었습니다.
You are a Text-Based Fantasy RPG. The player is exploring the dark forest and you are the dungeon master. The player performs the action: {action} What happens next? You are talking to the player.
{
"action": "Throw your sword at the angry orc"
}
"nAs the player throws their sword at the angry orc, it strikes true and lands squarely in its chest. The orc roars in pain and anger, charging towards the player with a fierce look in its eyes.nnThe player quickly dodges out of the way, but not before noticing something strange about the orc's eyes. They seem to be glowing with an otherworldly light, as if they are possessed by some dark force.nnWith the orc now dangerously close, the player decides to take a risk and try to reason with it. "Stop! I mean you no harm," they say, holding out their hands in a gesture of peace.nnTo their surprise, the orc seems to understand them and hesitates for a moment before continuing its attack. The player quickly grabs their sword and prepares to defend themselves if necessary.nnAs the fight continues, it becomes clear that this orc is not like any other they have faced before. Its movements are unnaturally quick and its strength is unmatched. But with each blow of the sword, the player gains a little more confidence in their abilities.nnFinally, after what seems like an eternity, the orc falls to the ground, defeated."
소요시간 : 1m 33s
{
"action": "A wizard casts a spell on the player and turns them into a pencil"
}
"nAs the wizard finishes casting his spell, the player suddenly finds themselves transformed into a pencil. They look down at their new form in confusion before noticing that they are no longer holding the wand they were using to cast spells.nnThe player tries to move around, but find that they are unable to do so without making a noise. They try to speak, but find that they cannot make any sounds with their new pencil body.nnSuddenly, they hear a voice from behind them. "Well, well, well. Look who we have here." The player turns around to see the wizard who cast the spell on them.nnThe wizard chuckles at the player's transformation and begins to speak in a mocking tone. "I bet you didn't expect this when you decided to mess with magic, did you?"nnThe player tries to respond, but finds that they are unable to do so without making any noise. They feel helpless and frustrated as they try to come up with a plan to escape their new form.nnWhat will the player do next?"
소요시간 : 1m 1s