Este proyecto proporciona un conjunto de inicios rápidos destinados a acelerar la integración y personalización de GenAI dentro de entornos de juegos en vivo utilizando productos de Google Cloud y soluciones de juegos de código abierto.
En la industria del juego actual, brindar una experiencia personalizada y atractiva a los jugadores es crucial. Este proyecto ofrece a los desarrolladores de juegos un conjunto de recursos de inicio rápido para ayudarlos a integrar las capacidades de GenAI en sus entornos de juegos en vivo. Al aprovechar los productos de Google Cloud y las soluciones de juegos de código abierto, puedes mejorar la participación de los jugadores, desbloquear nuevos casos de uso con IA generativa y crear experiencias de juego memorables.
NOTA: Este es un repositorio que evoluciona rápidamente y se está adaptando para una variedad de casos de uso. Si desea contribuir o detectar algún error, abra un problema y/o no dude en enviar un PR para su revisión.
Si estás utilizando este proyecto, ★Destaca este repositorio para mostrar tu interés.
Carpeta | Descripción |
---|---|
terraformar | Scripts de implementación de infraestructura basados en Terraform |
ejemplos | Guías de inicio rápido individuales que se pueden probar e implementar según su caso de uso |
src | Código fuente principal que se utiliza como parte de nuestros inicios rápidos |
Los siguientes pasos lo guiarán a través de la guía de configuración de GenAI Quickstart . El proceso pasará por la habilitación de las API de Google Cloud adecuadas, la creación de los recursos a través de Terraform y la implementación de los manifiestos de Kubernetes necesarios para ejecutar el proyecto.
Nota: Estos pasos suponen que ya tienes un proyecto en ejecución en Google Cloud para el cual tienes permisos de IAM para implementar recursos.
git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart
Establece tu ID de proyecto único para 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.
Establecer ubicación predeterminada para Google Cloud
export LOCATION=us-central1
Para seguir mejor esta guía de inicio rápido, configure la variable de entorno CUR_DIR
export CUR_DIR=$(pwd)
gcloud auth list
Compruebe si su autenticación es correcta y su PROJECT_ID
es válido.
gcloud projects describe ${PROJECT_ID:?}
Deberías ver tu PROJECT_ID
en la lista con un 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
La implementación de recursos en la nube puede tardar entre 5 y 10 minutos. Para obtener una vista detallada de los recursos implementados, consulte README en el directorio terraform
.
Una vez que los recursos de la nube se hayan implementado correctamente con Terraform, obtenga las credenciales del clúster de GKE recién creado.
gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}
Pruebe sus credenciales de cliente de Kubernetes.
kubectl get nodes
Cambie al directorio genai
y genere plantillas comunes que utilicen su identificación única de proyecto.
# 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} " ;
Cree y ejecute cargas de trabajo GenAI con 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
Una vez implementadas las cargas de trabajo, puede cambiar y utilizar implementaciones 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.
También puedes ejecutar los backends individuales de forma aislada:
# 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
Acceda a la API: puede probar la aplicación y todas las API desde aquí :)
El clúster crea un balanceador de carga de red (ILB) de paso interno. Para acceder a las API, ejecute:
kubectl port-forward svc/genai-api -n genai 8080:80
luego en otra ventana ejecuta:
export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"
y luego navegue hasta la URL en su navegador.
Pruebe la 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?"}'
O pruebe la API utilizando el contenedor api-caller
dentro del clúster:
# 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?
En el directorio genai
cd ${CUR_DIR:?}/genai
skaffold delete
En el directorio terraform
cd ${CUR_DIR:?}/terraform
terraform destroy
Si no está ejecutando el proyecto anterior en Google Cloud Shell, asegúrese de haber iniciado sesión y autenticado con el proyecto deseado:
gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}
y siga el flujo de autenticación.
El repositorio completo se puede clonar y usar tal como está o, en muchos casos, puede optar por bifurcar este repositorio y conservar la base de código que sea más útil y relevante para su caso de uso. Si desea contribuir, puede encontrar más información en nuestra guía de contribución.