Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - googleforgames/GenAI-quickstart: Google for Games Generative AI Quickstart · GitHub
Skip to content

Latest commit

History

165 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

GenAI Quickstart for Games

This project provides set of quickstarts aimed at accelerating GenAI integration and personalization within of live game enviroments using Google Cloud products and open source gaming solutions.

In today's gaming industry, providing a personalized and engaging experience for players is crucial. This project offers game developers a set of quickstart resources to help them integrate GenAI capabilities into their live game environments. By leveraging Google Cloud products and open-source gaming solutions, you can enhance player engagement, unlock new use cases with Generative AI, and create memorable gaming experiences.

NOTE: This is a rapidly evolving repo and is being adapted for a variety of use cases. If you would like to contribute or notice any bugs, please open an issue and/or feel free to submit a PR for review.

If you’re using this project, please ★Star this repository to show your interest!

Project Structure

FolderDescription
terraformInfrastructure deployment scripts based on Terraform
examplesIndividual quickstarts that can be tested and deployed based on your use case
srcCore source code that is used as part of our quickstarts

Architecture

Architecture

Prerequisites

Getting started

The following steps below will walk you through the setup guide for GenAI Quickstart. The process will walk through enabling the proper Google Cloud APIs, creating the resources via Terraform, and deployment of the Kubernetes manifests needed to run the project.

Note: These steps assume you already have a running project in Google Cloud for which you have IAM permissions to deploy resources into.

1) Clone this git repository

git clone https://github.com/googleforgames/GenAI-quickstart.git
cd GenAI-quickstart

2) Set ENV variable

Set your unique Project ID for 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.

Set default location for Google Cloud

export LOCATION=us-central1

To better follow along with this quickstart guide, set CUR_DIR env variable

export CUR_DIR=$(pwd)

3) Confirm user authentication to Google Cloud project

gcloud auth list

Check if your authentication is ok and your PROJECT_ID is valid.

gcloud projects describe ${PROJECT_ID:?}

You should see the your PROJECT_ID listed with an ACTIVE state.

4) Enable Google Cloud APIs

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

5) Deploy infrastructure with Terraform

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

The deployment of cloud resources can take between 5 - 10 minutes. For a detailed view of the resources deployed see README in terraform directory.

6) Setup GKE credentials

After cloud resources have successfully been deployed with Terraform, get newly created GKE cluster credentials.

gcloud container clusters get-credentials genai-quickstart --region us-central1 --project ${PROJECT_ID:?}

Test your Kubernetes client credentials.

kubectl get nodes

7) Deploy GenAI workloads on GKE

Switch to the genai directory and render common templates that use your unique project id.

# 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} " \;

Build and run GenAI workloads with 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

After workloads are deployed, you can swap to using GPU deployments instead:

# 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.

You can also run the individual backends in isolation:

# 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

8) Tests

Access the API - You can test the application and all the APIs from here :)

The cluster creates an internal passthrough Network Load Balancer (ILB). To access the APIs run:

kubectl port-forward svc/genai-api -n genai 8080:80

then in another window run:

export EXT_IP=localhost:8080
echo "Browse to http://${EXT_IP}/genai_docs to try out the GenAI APIs!"

and then navigate to the URL in your browser.

Test the API using 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?"}'

Or test the API using the api-caller container inside the 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?

Project cleanup

Remove Kubernetes resources

In genai directory

cd ${CUR_DIR:?}/genai
skaffold delete

Remove infrastructure

In terraform directory

cd ${CUR_DIR:?}/terraform
terraform destroy

Troubleshooting

Not authenticated with Google Cloud project

If you are not running the above project in Google Cloud shell, make sure you are logged in and authenticated with your desired project:

gcloud auth application-default login
gcloud config set project ${PROJECT_ID:?}

and follow the authentication flow.


Contributing

The entire repo can be cloned and used as-is, or in many cases you may choose to fork this repo and keep the code base that is most useful and relevant for your use case. If you'd like to contribute, then more info can be found witin our contributing guide.

About

Google for Games Generative AI Quickstart

Topics

Resources

Contributing

Stars

51 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages