Skip to content

快速开始

envd 是什么?

envd(ɪnˈvdɪ)是一个命令行工具,可以帮助你为 AI/ML 创建基于容器的开发环境。

开发环境通常包括了 Python,系统依赖,CUDA,BASH 脚本,Dockerfiles,SSH 配置,Kubernetes YAMLs,以及许多其他冗长的设置。在长年累月的开发中,系统里的东西总会越来越多,改动无法追踪,最终导致错误。envd 就是要解决这样的问题。

  1. build.envd 中声明需要的软件依赖(CUDA、Python 包、你最喜欢的 IDE 等)。
  2. 在命令行里运行 envd up
  3. 在独立且隔离的环境中开发。

为什么使用 envd

使用 envd 构建的环境提供了以下开箱即用的功能。

❤️ 团队的知识积累

envd 构建函数可以被重用。使用 include 函数来导入任何 git 仓库中的 envd 函数。复用不再需要复制粘贴 Dockerfile 中的命令,可以直接复用已有函数。

python
envdlib = include("https://github.com/tensorchord/envdlib")

def build():
    base(os="ubuntu20.04", language="python")
    envdlib.tensorboard(8888)
envdlib.tensorboard 来自 github.com/tensorchord/envdlib
python
def tensorboard(envd_port=6006, envd_dir="/home/envd/logs",
        host_port=0, host_dir="/var/log/tensorboard"):
    """Configure TensorBoard.

    Make sure you have permission for `host_dir`

    Args:
        envd_port (Optional[int]): port used by envd container
        envd_dir (Optional[str]): log storage mount path in the envd container
        host_port (Optional[int]): port used by the host, if not specified or equals to 0,
            envd will randomly choose a free port
        host_dir (Optional[str]): log storage mount path in the host
    """
    install.python_packages(["tensorboard"])
    runtime.mount(host_path=host_dir, envd_path=envd_dir)
    runtime.daemon(
        commands=[
            [
                "tensorboard",
                "--logdir",
                "/home/envd/logs",
                "--port",
                str(envd_port),
                "--host",
                "0.0.0.0",
                ">>tensorboard.log",
                "2>&1",
            ],
        ]
    )
    runtime.expose(envd_port=envd_port, host_port=host_port, service="tensorboard")

⏱️ BuildKit 原生,构建速度提高 6 倍

BuildKit 支持并行构建和构建时的软件缓存(例如 pip 和 apt 缓存)。你可以在不用了解细节的情况下享受到它的强大之处。

例如,PyPI 缓存是在不同的构建过程中可以被被共享。因此如果软件包以前被下载过,就会直接利用缓存安装。

三分钟建立你的 envd 环境

安装要求

  • Docker (20.10.0 or above)

安装和初始化 envd

bash
# envd 也可以用 pip 来安装。

pip3 install --upgrade envd
bash
# 如果你使用的是 MacOS,可以通过 homebrew 来安装 envd。

brew install envd
bash
# envd 也可以通过 pipx 安装。

pipx install envd
bash
# 在终端中运行以下命令即可安装最新版本的 envd:

curl -sSfL https://envd.tensorchord.ai/install.sh | sudo bash

安装完成后,请运行 envd bootstrap 来初始化。

bash
envd bootstrap

TIP

你可以在运行 envd bootstrap 时添加 --dockerhub-mirror-m选项,来设置 docker.io 仓库的镜像。

bash
envd bootstrap --dockerhub-mirror https://docker.mirrors.sjtug.sjtu.edu.cn

创建一个 envd 环境

先克隆仓库envd-quick-start:

git clone https://github.com/tensorchord/envd-quick-start.git

声明文件 build.envd 是这样的:

python
def build():
    config.repo(url="https://github.com/tensorchord/envd", description="envd quick start example")
    base(os="ubuntu20.04", language="python3")
    # Configure pip index if needed.
    # config.pip_index(url = "https://pypi.tuna.tsinghua.edu.cn/simple")
    install.python_packages(name = [
        "numpy",
    ])
    shell("zsh")

TIP

我们在这里使用 Python 作为例子,除此之外,envd 也支持其他语言,如 R 和 Julia,参见这里

然后可以运行下面的命令来建立一个新的环境:

cd envd-quick-start && envd up
$ cd envd-quick-start && envd up
[+] ⌚ parse build.envd and download/cache dependencies 2.8s ✅ (finished)
 => download oh-my-zsh                                                    2.8s
[+] 🐋 build envd environment 18.3s (25/25) ✅ (finished)
 => create apt source dir                                                 0.0s
 => local://cache-dir                                                     0.1s
 => => transferring cache-dir: 5.12MB                                     0.1s
...
 => pip install numpy                                                    13.0s
 => copy /oh-my-zsh /home/envd/.oh-my-zsh                                 0.1s
 => mkfile /home/envd/install.sh                                          0.0s
 => install oh-my-zsh                                                     0.1s
 => mkfile /home/envd/.zshrc                                              0.0s
 => install shell                                                         0.0s
 => install PyPI packages                                                 0.0s
 => merging all components into one                                       0.3s
 => => merging                                                            0.3s
 => mkfile /home/envd/.gitconfig                                          0.0s
 => exporting to oci image format                                         2.4s
 => => exporting layers                                                   2.0s
 => => exporting manifest sha256:7dbe9494d2a7a39af16d514b997a5a8f08b637f  0.0s
 => => exporting config sha256:1da06b907d53cf8a7312c138c3221e590dedc2717  0.0s
 => => sending tarball                                                    0.4s
envd-quick-start via Py v3.9.13 via 🅒 envd
⬢ [envd]❯ # You are in the container-based environment!

设置 Jupyter Notebook

修改 build.envd 开启 Jupyter Notebook 支持:

python
def build():
    config.repo(url="https://github.com/tensorchord/envd", description="envd quick start example")
    base(os="ubuntu20.04", language="python3")
    # Configure pip index if needed.
    # config.pip_index(url = "https://pypi.tuna.tsinghua.edu.cn/simple")
    install.python_packages(name = [
        "numpy",
    ])
    shell("zsh")
    config.jupyter()

你可以通过 envd envs ls 获得正在运行的 Jupyter Notebook 的端口。

bash
$ envd up --detach
$ envd envs ls
NAME                    JUPYTER                 SSH TARGET              CONTEXT                                 IMAGE                   GPU     CUDA    CUDNN   STATUS          CONTAINER ID
envd-quick-start        http://localhost:42779   envd-quick-start.envd   /home/gaocegege/code/envd-quick-start   envd-quick-start:dev    false   <none>  <none>  Up 54 seconds   bd3f6a729e94

路线图 🗂️

我们的路线图在这里 ROADMAP

envd 贡献 😊

我们欢迎来自开源社区、个人和合作伙伴的各种贡献。

利用 Gitpod 来开发:Open in Gitpod


与我们交谈

💬 有兴趣和我们交流一下您在构建或管理 AI/ML 应用方面的经验吗?

约个时间聊聊!

Released under the Apache-2.0 License. Built with VitePress.