iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
DevOps

從 AWS 轉生到 GCP 世界,還順便轉職成 DevOps 的 SRE系列 第 25

將 Infra 從 Code-Base 改為 Cloud-Resource-Base Part5

  • 分享至 

  • xImage
  •  

昨天有提到我希望可以打包開發環境的 ubuntu 環境讓 ML 的 app 順利運行,但遇到 init 此環境挫折滿滿。原本打算直接用 docker commit 抓當前環境當 base image,但我白天還是試了根據 error 安裝對應 Repo 的方式加上忽略無法安裝的 package 的方式想要測試是否可行

# Add Docker repository
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# Add Google Cloud repository
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

RUN xargs -a /tmp/linux_requirements.txt apt-get install -y --no-install-recommends || true

打包好一份 Code 之後,接下來我要上到 GKE 的 JOB 上看看可不可行了!另外,再跟同事詢問如何測試 ML 這包 code 的時候,他有提到要帶一些參數,所以我有改了一下 Dockerfile

  • 觸發 job 要可以運行帶參數

    
    # 創建 secrets 目錄
    RUN mkdir -p /app/secrets
    
    # 複製 GCS 密鑰文件
    COPY ./secrets/gcs-user-key.json /app/secrets/gcs-user-key.json
    
    # 設置環境變量
    ENV GCS_KEY_PATH=/app/secrets/gcs-user-key.json
    
    # 設置啟動命令
    CMD ["python", "predict.py", \
        "--job_id", "fake_job_id", \
        "--credential", "${GCS_KEY_PATH}", \
        "--source-bucket-name", "ops-payment-invoice", \
        "--result-bucket-name", "ops-payment-invoice"]
    
  • 遇到 Cloud Auth 問題,改用以下 code update config

    - gcloud auth configure-docker asia-east1-docker.pkg.dev -q
    
  • 利用此 image 觸發 job,看看可不可行

    • 在 cloud function 更改 image
    gcloud pubsub topics publish gke-job-trigger-topic --message="Trigger GKE job now"
    
    
    ❯ kubectl get pods
    NAME                                      READY   STATUS             RESTARTS           AGE
    python-logger-job-20241009-083116-gld55   0/1     Completed          0                  2m24s
    
    ❯ kubectl logs python-logger-job-20241009-083116-gld55
    2024-10-09 08:32:41,790 - 開始執行腳本
    2024-10-09 08:32:41,910 - 這是第 1 條日誌訊息
    2024-10-09 08:32:42,910 - 這是第 2 條日誌訊息
    2024-10-09 08:32:43,918 - 這是第 3 條日誌訊息
    2024-10-09 08:32:44,920 - 這是第 4 條日誌訊息
    2024-10-09 08:32:45,921 - 這是第 5 條日誌訊息
    2024-10-09 08:32:46,921 - 腳本執行完畢
    
  • 忘記要 trigger GPU

            job = client.V1Job(
                api_version="batch/v1",
                kind="Job",
                metadata=client.V1ObjectMeta(name=job_name),
                spec=client.V1JobSpec(
                    template=client.V1PodTemplateSpec(
                        spec=client.V1PodSpec(
                            containers=[
                                client.V1Container(
                                    name=container_name,
                                    image=container_image,
                                    resources=client.V1ResourceRequirements(
                                        limits={"nvidia.com/gpu": 1}
                                    )
    
                                )
                            ],
                            restart_policy="Never",
                            node_selector={"cloud.google.com/gke-accelerator": "nvidia-tesla-t4"}
    
                        )
                    ),
                    backoff_limit=4,
                    ttl_seconds_after_finished=3600  # 添加这行,Job 完成后保留 1 小时
                )
            )
    

    要特別記得 node selector 不然會遇到 cloudfunction 出錯的問題

    You must specify a GPU type with node selector 'cloud.google.com/gke-accelerator' when GPU is requested on Autopilot workloads
    
  • 可行,利用原始 code 打包 image

  • 利用此 image 觸發 job,看看可不可行

  • 不可行,要重新打包 image


上一篇
將 Infra 從 Code-Base 改為 Cloud-Resource-Base Part4
下一篇
將 Infra 從 Code-Base 改為 Cloud-Resource-Base 外傳 pipreqs
系列文
從 AWS 轉生到 GCP 世界,還順便轉職成 DevOps 的 SRE30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言