使用 Podman 運行一個 “hello world” MLCube
MLCube 是一個新的基于基礎設施規(guī)范的開源容器,被引入到基于 Python 的機器學習工作流程中,以實現(xiàn)可重復性。它可以利用諸如 Podman、Singularity 和 Docker 等工具。也支持在遠程平臺上的執(zhí)行。開發(fā) MLCube 的 MLCommons 最佳實踐工作組的主席之一是來自 Red Hat 的 Diane Feddema。這篇介紹性文章解釋了如何在 Fedora Linux 上使用 Podman 運行 “hello world” MLCube 例子。
Yazan Monshed 寫了一篇關于 Fedora 上的 Podman 的非常有用的介紹,對這里使用的一些步驟給出了更多細節(jié)。
首先安裝必要的依賴項。
sudo dnf -y update
sudo dnf -y install podman git virtualenv \
policycoreutils-python-utils
然后,按照文檔的要求,設置一個虛擬環(huán)境并獲得示例代碼。為了確保可重復性,使用一個特定的提交,因為該項目正在積極改進。
virtualenv -p python3 ./env_mlcube
source ./env_mlcube/bin/activate
git clone https://github.com/mlcommons/mlcube_examples.git
cd ./mlcube_examples/hello_world
git checkout 5fe69bd
pip install mlcube mlcube-docker
mlcube describe
現(xiàn)在,通過編輯 $HOME/mlcube.yaml 文件,將運行器命令從 docker 改為 podman,即:
docker: docker
改為:
docker: podman
如果你使用的是 x86_64 架構的電腦,你可以用以下方式獲取容器:
mlcube configure --mlcube=. --platform=docker
你會看到一些選項:
? Please select an image:
? registry.fedoraproject.org/mlcommons/hello_world:0.0.1
registry.access.redhat.com/mlcommons/hello_world:0.0.1
docker.io/mlcommons/hello_world:0.0.1
quay.io/mlcommons/hello_world:0.0.1
選擇 docker.io/mlcommons/hello_world:0.0.1 來獲取容器。
如果你的電腦不是 x86_64 架構的,你需要構建容器。改變文件 $HOME/mlcube.yaml,將這一行:
build_strategy: pull
變?yōu)椋?/p>
build_strategy: auto
然后用以下方法構建容器:
mlcube configure --mlcube=. --platform=docker
要運行測試,你可能需要在目錄中適當?shù)卦O置 SELinux 權限。你可以通過輸入以下內容來檢查 SELinux 是否已經(jīng)啟用:
sudo sestatus
應該會有類似這樣的輸出:
SELinux status: enabled
Josphat Mutai、Christopher Smart 和 Daniel Walsh 解釋說,在為容器使用的文件設置適當?shù)?SELinux 策略時,你需要謹慎。在這里,你將允許容器讀取和寫入 workspace 目錄。
sudo semanage fcontext -a -t container_file_t "$PWD/workspace(/.*)?"
sudo restorecon -Rv $PWD/workspace
現(xiàn)在檢查目錄策略:
ls -Z
輸出結果類似于:
unconfined_u:object_r:user_home_t:s0 Dockerfile
unconfined_u:object_r:user_home_t:s0 README.md
unconfined_u:object_r:user_home_t:s0 mlcube.yaml
unconfined_u:object_r:user_home_t:s0 requirements.txt
unconfined_u:object_r:container_file_t:s0 workspace
現(xiàn)在運行這個例子:
mlcube run --mlcube=. --task=hello --platform=docker
mlcube run --mlcube=. --task=bye --platform=docker
最后,檢查輸出:
cat workspace/chats/chat_with_alice.txt
有類似于以下的文字:
Hi, Alice! Nice to meet you.
Bye, Alice! It was great talking to you.
你可以按照 這里 的描述創(chuàng)建你自己的 MLCube。歡迎對 MLCube 示例庫 做出貢獻。Udica 是一個新項目,它承諾為容器提供更精細的 SELinux 策略控制,便于系統(tǒng)管理員應用。這些項目的積極開發(fā)正在進行中。對它們進行測試并提供反饋,將有助于使帶有 SELinux 的系統(tǒng)上的安全數(shù)據(jù)管理更容易、更有效。