iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
AI & Data

Rust 加 MLOps,你說有沒有搞頭?系列 第 4

[Day 04] - 走到哪用到哪 🏃,Rust MLOps GitHub 模板與在容器中開發

  • 分享至 

  • xImage
  •  

今日份 Ferris

今天要讓博士章魚貓跟 Ferris 帶我們開始寫程式碼啦!
https://ithelp.ithome.com.tw/upload/images/20231012/20141304lgsiphOAiy.jpg
professortocat_v2 + Extra-cute ferris

GitHub Template

昨天說到安裝 Rust 有多輕鬆,還有 Rustup 安裝工具 救甘心,一併幫我們把 linter, formatter 甚至測試框架等工具都準備好了,今天我們就來ㄑ著手建立以後都可以帶著走的 GitHub 模板吧。
完整的模板可以在我的 GitHub🐱 中找到,那我們就開始吧~

0. 將 Repo 設定為模板

首先,要先建立一個新的 GitHub Repository,然後在設定中將其勾選為 Template repository:
https://ithelp.ithome.com.tw/upload/images/20230919/20141304QB0I5MEx4c.png
接下來我們將一步一步完善這個 Repository,使其可以作為模板使用。

1. Dev Container

為了讓開發環境盡可能維持一致,這裡我們將利用 Visual Studio Code 的 Dev Containers 延伸模組以進行容器中開發,而建立好容器好更能夠搭配 GitHub Codespace 走到哪用到哪。
整體的架構如下圖:
https://ithelp.ithome.com.tw/upload/images/20230919/20141304zVbzzrOXUm.png
Developing inside a Container

🚨 接下來的示範將以 Codespace 為主,但本機端也是一樣的邏輯,只是要注意以下兩點先決條件:

這裡只會簡略說明怎麼建立 Rust 的開發用容器,詳細說明可以參考 官方說明
要使用 Dev Containers 最重要就是要有 .devcontainer 資料夾,然後其中必須有 Dockerfiledevcontainer.json 兩個檔案,資料夾架構如下:

.devcontainer
├── devcontainer.json
└── Dockerfile

其中 Dockerfile 為要建立的 Docker 映像檔,devcontainer.json 則為 Dev Container 的配置檔。
首先看到 Dockerfile,這裡使用了 Rust 1.x 版本並把作業系統定為當前的穩定版 Debian 12 ("bookworm"),整體來說很簡單,短短的如下而已:

# [Choice] Debian OS version (use bookworm, or bullseye on local arm64/Apple Silicon): bookworm, buster, bullseye
ARG VARIANT="bookworm"
FROM rust:1-${VARIANT}

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    # Remove imagemagick due to https://security-tracker.debian.org/tracker/CVE-2019-10131

devcontainer.json 則只列出較重要的部分,詳細請參考 GitHub

{
    ...
    "features": {
        // 設定容器的基本功能
        "ghcr.io/devcontainers/features/common-utils:2": {
            "installZsh": "true",
            "configureZshAsDefaultShell": "true",
            "installOhMyZsh": "false",
            "installOhMyZshConfig": "false",
        },
        // 設定與 Rust 開發相關的基本功能
        "ghcr.io/devcontainers/features/rust:1": "latest"
    }
    // 設定與 Rust 開發相關的基本功能
    "customizations": {
        "vscode": {
            "extensions": [
                "usernamehw.errorlens"
            ]
        }
    },
    // 建立容器時要執行的指令
    "postCreateCommand": "sh ./setup.sh",
    ...
}

其中:

  • featurescommon-utils:2 設定了容器的基本功能,這裡安裝了 zsh 並將其作為預設,另外把 Oh My Zsh 的安裝關掉。
    rust:1 則設定了 Rust 的基本功能,並安裝了 rust-analyzer、CodeLLDB、Even Better TOML、crates 四個最常用的 VSC 延伸模組,點擊各自的超連結可以得到詳細說明。
  • 透過 customizations -> vscode -> extensions 可以加入額外的延伸模組,這裡加入了昨天介紹的 Error Lens,注意這個格式為模組識別碼,可以在延伸模組下圖的位置找到:
    https://ithelp.ithome.com.tw/upload/images/20230919/20141304PoKFcrBTA5.png
  • postCreateCommand 則為建立容器時會執行的指令,這裡讓其執行了 setup.sh,可以用來配置終端機,或進行任何預先設定。

2. setup.sh 與 GitHub Codespace

上一個步驟中,特別針對 ZSH 做了設定的原因在於漂釀的終端機讓人心情好 (還有自動提示、語法上色等等),更重要的是 工程師的鄙視鏈 豪可怕!
https://ithelp.ithome.com.tw/upload/images/20230919/20141304ePJckCnqXp.png
setup.sh 的撰寫離題太多了,請自行參考 GitHub (別擔心,很簡單),這裡就直接跳到該怎麼開啟 Codespace 吧。

🚨 如果在 Windows 上執行遇到 setup.sh: 95: Syntax error: end of file unexpected (expecting "then") 的錯誤的話,只要把 CRLF 改成 LF 就好。
詳細請參考 How to Show and Set Line endings in Visual Studio Code

如果都按照前面的說明建立檔案的話,目前的資料夾結構應該會如下圖:

root /
├── .devcontainer
│   ├── devcontainer.json
│   └── Dockerfile
└── setup.sh

這時候可以在 GitHub 頁面下圖的位置點選 Create codespace on main (或是打開右上角的...,選擇 New with options... 挑選硬體配置,一般用戶每個月有 120 核心小時數可以免費用,詳細收費請參考 官方說明):
https://ithelp.ithome.com.tw/upload/images/20230919/20141304iEWMo6x4mz.png
等個幾分鐘,打開之後會是一個跟 Visual Studio Code 一樣的頁面,右下角會有一個隨機的名字,例如這次就叫做特別的太空水豚 (很讚🥰),可以看到在終端機的部分已經根據 setup.sh 的內容詢問是否安裝 ZSH 的擴充套件:
https://ithelp.ithome.com.tw/upload/images/20230920/20141304mAiulQYDJl.png
輸入 y 之後就會開始安裝,然後 Powerlevel10k 配置巫師就會開始問你一堆問題 (記得要安裝 Meslo Nerd 字體):
https://ithelp.ithome.com.tw/upload/images/20230919/20141304RZI4XKM5da.png
回答完之後就可以得到漂釀的終端機啦:
https://ithelp.ithome.com.tw/upload/images/20230919/20141304SyXDUHsbQH.png

總結一下,今天我們先設定好了 GitHub Codespace 的容器,明天就來跑跑看 Rust 吧!
/images/emoticon/emoticon37.gif


上一篇
[Day 03] - 從 Python 🐍 到 Rust 🦀|上工啦!安裝、環境與函式庫相依管理
下一篇
[Day 05] - Rust 原廠要你命 3000 🧨,Makefile 跑起來啦寶貝
系列文
Rust 加 MLOps,你說有沒有搞頭?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言