How to run on Cloud Run#
This describes how to set up the Dockerized gRPC server to run on Google Cloud Run, while the clients are training the model locally.
We assume that the Docker container gcr.io/$GCP_PROJECT/appfl-test:latest
is already available. If you are not sure, see Preparing a Docker container.
Deploying the Dockerized gRPC server#
The Docker container can be deployed to the cloud, and the communication port will be open at 50051. The port should be set to the same as in the appfl configuration.
gcloud beta run deploy appfl-test \
--execution-environment gen2 \
--image gcr.io/$GCP_PROJECT/appfl-test:latest \
--platform managed \
--memory=4G \
--port=50051 \
--command=python3 \
--args=grpc_mnist_server.py \
--args="--logging=INFO" \
--args="--nclients=3"
The last four arguments replace the default CMD
in Dockerfile
, and thus may have values of your choice.
If the package is successfully deployed to the cloud, you may see the messages like this:
Deploying container to Cloud Run service [appfl-test] in project [grpc-tutorial-123456] region [us-central1]
✓ Deploying new service... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [appfl-test] revision [appfl-test-00001-yif] has been deployed and is serving 100 percent of traffic.
Service URL: https://appfl-test-abcd1234-uc.a.run.app
Now the server is ready to listen requests from clients. The service URL is given in the last line from the above: https://appfl-test-abcd1234-uc.a.run.app
, and this needs to be used as host
when launching clients.
Launching a client#
A client can start the federated learning with the following:
python grpc_mnist_client.py \
--host=/appfl-test-abcd1234-uc.a.run.app \
--use_tls=True \
--client_id=1 \
--nclients=3
Note
In this example grpc_mnist_client.py
we pass multiple arguments. The most important one is --host
and --use_tls
for the service URL and the indication of using TLS (transport layer security). Note that the port number is not passed.