Este projeto fornece um conjunto de guias de início rápido com o objetivo de acelerar a integração e personalização do GenAI em ambientes de jogos ao vivo usando produtos Google Cloud e soluções de jogos de código aberto.
Na indústria de jogos atual, é crucial fornecer uma experiência personalizada e envolvente aos jogadores. Este projeto oferece aos desenvolvedores de jogos um conjunto de recursos de início rápido para ajudá-los a integrar recursos GenAI em seus ambientes de jogos ao vivo. Ao aproveitar os produtos do Google Cloud e as soluções de jogos de código aberto, você pode melhorar o envolvimento dos jogadores, desbloquear novos casos de uso com IA generativa e criar experiências de jogo memoráveis.
NOTA: Este é um repositório em rápida evolução e está sendo adaptado para uma variedade de casos de uso. Se você gostaria de contribuir ou notar algum bug, abra um problema e/ou sinta-se à vontade para enviar um PR para revisão.
Se você estiver usando este projeto, marque este repositório com estrela para mostrar seu interesse!
Pasta | Descrição |
---|---|
terraformar | Scripts de implantação de infraestrutura baseados em Terraform |
exemplos | Guias de início rápido individuais que podem ser testados e implantados com base no seu caso de uso |
fonte | Código-fonte principal usado como parte de nossos guias de início rápido |
As etapas a seguir orientarão você no guia de configuração do GenAI Quickstart . O processo passará pela ativação das APIs adequadas do Google Cloud , pela criação dos recursos por meio do Terraform e pela implantação dos manifestos do Kubernetes necessários para executar o projeto.
Observação: essas etapas pressupõem que você já tenha um projeto em execução no Google Cloud para o qual tenha permissões do IAM para implantar recursos.
git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart
Defina seu ID de projeto exclusivo para o Google Cloud
# To just use your current project
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
# Otherwise set it to the project you wish to use.
Definir local padrão para o Google Cloud
export LOCATION=us-central1
Para acompanhar melhor este guia de início rápido, defina a variável env CUR_DIR
export CUR_DIR=$(pwd)
gcloud auth list
Verifique se sua autenticação está correta e se seu PROJECT_ID
é válido.
gcloud projects describe ${PROJECT_ID:?}
Você deverá ver seu PROJECT_ID
listado com um estado ACTIVE
.
gcloud services enable --project ${PROJECT_ID:?}
aiplatform.googleapis.com
artifactregistry.googleapis.com
cloudbuild.googleapis.com
cloudresourcemanager.googleapis.com
compute.googleapis.com
container.googleapis.com
containerfilesystem.googleapis.com
containerregistry.googleapis.com
iam.googleapis.com
servicecontrol.googleapis.com
spanner.googleapis.com
cd ${CUR_DIR:?}/terraform
cat terraform.example.tfvars | sed -e "s:your-unique-project-id:${PROJECT_ID:?}:g" > terraform.tfvars
terraform init
terraform plan
terraform apply
A implantação de recursos em nuvem pode levar de 5 a 10 minutos. Para uma visão detalhada dos recursos implantados, consulte README no diretório terraform
.
Depois que os recursos da nuvem forem implantados com êxito com o Terraform, obtenha as credenciais de cluster do GKE recém-criadas.
gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}
Teste suas credenciais de cliente Kubernetes.
kubectl get nodes
Mude para o diretório genai
e renderize modelos comuns que usam seu ID de projeto exclusivo.
# Find all files named .template.yaml, replace `your-unique-project-id` with PROJECT_ID, and output to .yaml.
cd ${CUR_DIR:?}/genai && find common -type f -name "*.template.yaml" -exec
bash -c "template_path={}; sed "s:your-unique-project-id:${PROJECT_ID:?}:g" < ${template_path} > ${template_path/%.template.yaml/.yaml} " ;
Crie e execute cargas de trabalho GenAI com Skaffold
gcloud auth configure-docker ${LOCATION:?}-docker.pkg.dev
export SKAFFOLD_DEFAULT_REPO=${LOCATION:?}-docker.pkg.dev/${PROJECT_ID:?}/repo-genai-quickstart
cd ${CUR_DIR:?}/genai
# To run all apis and models (requires a GPU node for stable-diffusion)
skaffold run --build-concurrency=0
Depois que as cargas de trabalho forem implantadas, você poderá passar a usar implantações de GPU:
# Scale up a 2xL4 Mixtral 8x7B Deployment:
kubectl scale -n genai deployment huggingface-tgi-mixtral-small --replicas=1
# Or scale up a 8xL4 Mixtral 8x7B Deployment:
kubectl scale -n genai deployment huggingface-tgi-mixtral-big --replicas=1
# Scale down CPU Deployment:
kubectl scale -n genai deployment huggingface-tgi-mistral-cpu --replicas=0
# Note that the `huggingface-tgi-api` Service matches all of the huggingface-tgi-*
# Deployments, so if you have multiple replicas running, it will load balance
# between them.
Você também pode executar back-ends individuais isoladamente:
# To run only stable-diffusion (requires a GPU node)
#skaffold run --module stable-diffusion-api-cfg,stable-diffusion-endpt-cfg
# To run only Vertex chat (Vertex AI is required)
#skaffold run --module vertex-chat-api-cfg
Acesse a API - Você pode testar o aplicativo e todas as APIs aqui :)
O cluster cria um Network Load Balancer (ILB) de passagem interna. Para acessar as APIs execute:
kubectl port-forward svc/genai-api -n genai 8080:80
então em outra janela execute:
export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"
e navegue até o URL em seu navegador.
Teste a API usando curl
:
curl -X 'POST' "http://${EXT_IP}/genai/text"
-H 'accept: application/json'
-H 'Content-Type: application/json'
-d '{"prompt": "Who are the founders of Google?"}'
Ou teste a API usando o contêiner api-caller
dentro do cluster:
# See available service endpoints. The `genai` endpoint wraps them all.
kubectl get svc -ngenai
# Start `api-caller` pod interactively
kubectl run -it -ngenai --rm --restart=Never api-caller --image=${SKAFFOLD_DEFAULT_REPO}/api-caller:latest
# Examples:
# See available example scripts
root@api-caller:/app# ls
embeddings.py genai_api.py huggingface_tgi.py npc_chat_api.py stable_diffusion_api.py vertex_chat_api.py vertex_code_api.py vertex_gemini_api.py vertex_image_api.py vertex_text_api.py
# The genai_api script works for text prompts
root@api-caller:/app# python3 genai_api.py --endpoint=http://genai-api/genai/text --prompt "Describe a wombat"
INFO:root:Status Code: 200
INFO:root:Response: "A wombat is a marsupial native to Australia. [...]"
# To try the Smart NPC, first reset the world data:
root@api-caller:/app# python3 npc_chat_api.py --endpoint http://genai-api/genai/npc_chat/reset_world_data --empty
INFO:root:Status Code: 200
INFO:root:Response: {"status":"ok"}
# Then you can use the interactive chat:
root@api-caller:/app# python3 npc_chat_api.py --endpoint http://genai-api/genai/npc_chat --chat
>>> hey, how are you?
<<< I am doing my best here at the distribution center. It's a tough situation, but I am staying focused on helping those in need. How about you? How are you holding up?
# You can also interact with the services underneath, e.g.: Hugging Face TGI supports an interactive chat
root@api-caller:/app# python3 huggingface_tgi.py --endpoint=http://huggingface-tgi-api:8080/v1
>>> hello!
INFO:httpx:HTTP Request: POST http://huggingface-tgi-api:8080/v1/chat/completions "HTTP/1.1 200 OK"
<<< Hello! How can I help you today? If you have any questions or need assistance with something, feel free to ask and I'll do my best to help. If you just want to chat, we can talk about pretty much anything. What's on your mind?
No diretório genai
cd ${CUR_DIR:?}/genai
skaffold delete
No diretório terraform
cd ${CUR_DIR:?}/terraform
terraform destroy
Se você não estiver executando o projeto acima no Google Cloud Shell, certifique-se de estar conectado e autenticado com o projeto desejado:
gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}
e siga o fluxo de autenticação.
Todo o repositório pode ser clonado e usado como está ou, em muitos casos, você pode optar por bifurcar esse repositório e manter a base de código mais útil e relevante para o seu caso de uso. Se você quiser contribuir, mais informações podem ser encontradas em nosso guia de contribuição.