Assuming you create a remote instance named ‘fvm’ (free VM):
gcloud compute instances create fvm \
--image ubuntu-2004-focal-v20201211 \
--image-project ubuntu-os-cloud \
--boot-disk-device-name=freedisk \
--boot-disk-size=30 \
--machine-type=f1-micro \
--zone=us-east1-b \
--boot-disk-type=pd-standard \
--metadata-from-file startup-script=startup_gcp_free.sh
With the following start-up script, installing python 3.9 on the remote machine:
echo "startup-script"
sudo apt-get update
sudo apt-get install -y locales
sudo DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
sudo ln -fs /usr/share/zoneinfo/Asia/Singapore /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
sudo apt -y install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt -y install python3.9
python3.9 --version
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
You can view the log file for the startup script here
cat /var/log/syslog
Connect to the remote GCP instance:
gcloud compute ssh fvm if connecting over VPN with no public address: gcloud compute ssh --internal-ip fvm
Create remote directory:
gcloud compute ssh fvm -- 'mkdir -p ~/log'
Start / Stop instances:
gcloud compute instances stop fvm gcloud compute instances start fvm
Delete an instance:
gcloud compute instances delete fvm
Copy files back and forth from the local machine to the GCP instance:
Copy files from the local machine to the GCP instance: gcloud compute scp --compress /Users/user/Documents/develop/python/.../*.py fvm:~/<folder> Unzip files on the remote machine: gcloud compute ssh fml -- 'unzip ~/<folder>/data.zip -d ~/<folder>' Compress the result files on the remote machine: zip -r data.zip <folder> Copy the compressed files to the local machine: gcloud compute scp --compress fvm:~/<folder>/data.zip /Users/user/Documents/develop/<folder>/data.zip
If you plan to push a GPU-enabled Docker image to the VM, you should publish it first:
docker build -f tf2_gpu.dockerfile --force-rm --tag tf2.3_gpu:1.0 . docker images -a docker tag tf2.3_gpu:1.0 asia.gcr.io/<GCP project name>/tf2.3_gpu docker push asia.gcr.io/<GCP project name>/tf2.3_gpu
Connecting to the docker image (from the remote machine)
docker run -it asia.gcr.io/<GCP Project name>/tf2.3_gpu sh
remove the previous docker instance
docker rm tf23gpu
Run a python file on the Docker image with a shared filesystem (GCP remote machine and the Docker image), using the -v command with the following format
-v [host-src:]container-dest[:<options>]
docker run --name=tf23gpu --gpus all --runtime=nvidia -d -v ~/auto:/usr/src/app/auto asia.gcr.io/<GCP project name>/tf2.3_gpu python3 <python filename>.py -<param1>=<value1> -<param2>=<value2> ...