使用 Docker 和 Docker-Compose 运行 Streamlit
创建一个 Docker 容器,将您的机器学习模型作为 Web 应用程序运行 本文将解释 Streamlit 的优势以及如何使用 Docker 构建 Streamlit 应用程序。 为什么选择 Streamlit? 您已经探索了数据并开发了机器学习模型。现在是时候将它发布给全世界,以便其他人可以看到您构建的内容。 怎么办? 部署机器学习模型并非易事。 您最有可能使用CONDA,安装了Python和
创建一个 Docker 容器,将您的机器学习模型作为 Web 应用程序运行
本文将解释 Streamlit 的优势以及如何使用 Docker 构建 Streamlit 应用程序。
为什么选择 Streamlit?
您已经探索了数据并开发了机器学习模型。现在是时候将它发布给全世界,以便其他人可以看到您构建的内容。
怎么办?
部署机器学习模型并非易事。
您最有可能使用CONDA,安装了Python和数据科学的必要库(Numpy,[Pandas]]]]Scikit-learn,(https://scikit-learn.org/stable/index.html),[Jupyterlab]]](https://scikit-learn.org/stable/index.html)7.
该设置适用于数据探索和开发。但是,您将如何部署包含机器学习模型的 JupyterLab 笔记本?
答案是:你没有。
您将需要配置一个可以在生产中运行的新架构,例如带有 REST API 的 Web 应用程序。
图片来自Christopher Samiullah:四种潜在的 ML 系统架构方法
Streamlit 是经典机器学习部署的替代方案
Streamlit 是一种新工具,可让您运行具有漂亮 UI 的交互式 Python 机器学习脚本。
来自Streamlit.io的视频:构建具有 23 个功能的语义搜索引擎
Streamlit 的界面类似于熟悉的 Python 笔记本,您将作为数据科学家知道。但 Streamlit 应用程序提供了现代 UI、具有交互作用的小部件和内置 Web 服务器。
您可以使用您喜欢的文本编辑器来编辑您的代码,Streamlit 会为您更新代码。
安装很容易如果您使用典型的 Python 安装程序,例如pip或 conda。
但是如果你想用 Docker 和 docker-compose** 创建一个**独立的应用程序呢?
如何构建Streamlit Docker容器
先决条件:
-
码头工人
-
码头工人组成
创建一个新的项目文件夹,其文件夹结构如下(或类似):
.
├── data
├── docker-compose.yml
├── Dockerfile
├── images
│ ├── logo.png
│ └── screenshot.png
├── LICENSE
├── project
│ └── app.py
├── README.md
└── requirements.txt
进入全屏模式 退出全屏模式
data
文件夹将保存所有原始数据,例如 .csv 文件。project
文件夹将包含 Streamlit 程序。
Python库的安装
创建requirements.txt
文件:
scikit-learn==0.22.2.post1
streamlit==0.56.0
进入全屏模式 退出全屏模式
Docker 和 docker-compose
创建一个名为Dockerfile
的新文件,其内容如下:
###############
# BUILD IMAGE #
###############
FROM python:3.8.2-slim-buster AS build
# virtualenv
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# add and install requirements
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
#################
# RUNTIME IMAGE #
#################
FROM python:3.8.2-slim-buster AS runtime
# setup user and group ids
ARG USER_ID=1000
ENV USER_ID $USER_ID
ARG GROUP_ID=1000
ENV GROUP_ID $GROUP_ID
# add non-root user and give permissions to workdir
RUN groupadd --gid $GROUP_ID user && \
adduser user --ingroup user --gecos '' --disabled-password --uid $USER_ID && \
mkdir -p /usr/src/app && \
chown -R user:user /usr/src/app
# copy from build image
COPY --chown=user:user --from=build /opt/venv /opt/venv
# set working directory
WORKDIR /usr/src/app
# switch to non-root user
USER user
# disables lag in stdout/stderr output
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
# Path
ENV PATH="/opt/venv/bin:$PATH"
# Run streamlit
CMD streamlit run project/app.py
进入全屏模式 退出全屏模式
Docker 配置使用多阶段构建。在第一阶段,我们在虚拟环境中安装所有必要的 Python 包。
在构建阶段,您还可以安装gcc
之类的 Debian 软件包,您不想将其带入运行时 Docker 映像。
例如,在使用 pip 安装软件包之前,可以添加以下行:
# install dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends gcc
进入全屏模式 退出全屏模式
目前,这不是必需的,所以让我们继续使用运行时映像。
我们确保我们创建一个具有正确用户权限的非 root 用户。然后我们可以将 Python 库从构建镜像复制到运行时镜像。
最后一行显示了运行 Streamlit 的命令。
不要忘记添加一个.dockerignore
文件。例如:
# .dockerignore
.venv
.env*
进入全屏模式 退出全屏模式
为了方便,我们可以添加一个docker-compose.yml
配置:
version: '2.4'
services:
streamlit:
build:
dockerfile: ./Dockerfile
context: ./
ports:
- '8501:8501'
volumes:
- './data:/usr/src/app/data:delegated'
- './project:/usr/src/app/project:delegated'
environment:
- USER_ID=1000
- GROUP_ID=1000
进入全屏模式 退出全屏模式
该设置还将本地文件夹从您的计算机安装到 Docker 容器。现在您可以在使用 Docker 的同时开发您的应用程序并保存更改。
匹配的 docker 命令是:
# build Docker image in current directory
docker build -t 'latest' .
# Run docker image with port 8501 and volumes
docker run -it --rm --port '8501:8501' -v '$(pwd)/data:/usr/scr/app/data:delegated' -v '$(pwd)/project:/usr/scr/app/project:delegated' latest
进入全屏模式 退出全屏模式
创建Streamlit程序
在project
文件夹中,添加一个新文件 (app.py
):
# simple_streamlit_app.py
"""
A simple streamlit app
"""
import numpy as np
import pandas as pd
import streamlit as st
st.title("Simple Streamlit App")
st.write("Here's our first attempt at using data to create a table:")
st.write(
pd.DataFrame({"first column": [1, 2, 3, 4], "second column": [10, 20, 30, 40]})
)
进入全屏模式 退出全屏模式
运行应用程序
您现在可以使用docker-compose
在后台启动 Docker 容器。
在终端中输入:
docker-compose up -d
进入全屏模式 退出全屏模式
在您的浏览器中,您应该会看到 Streamlit 应用程序在http://localhost:8501
上运行。
现在,您可以使用 Python 技能和Streamlit 框架来创建数据丰富的应用程序。
回顾
你已经学会了:
-
为什么您可能希望使用 Streamlit 进行数据科学和 Python 机器学习
-
如何使用 Docker 安装 Streamlit 并运行您的第一个数据科学 Web 应用程序
怎么办?
您可以将 Docker 容器部署到 Heroku、DigitalOcean 或其他云提供商。
以后我会写一篇关于部署到 Heroku 的博文。
延伸阅读
-
Streamlit官网
-
如何在 Python 中构建 Streamlit 应用程序by Peter Kazarinoff
-
如何部署机器学习模型Christopher Samiullah
-
避免使用 Docker 创建的文件出现权限问题by Vladislav Supalov
-
以当前主机用户身份运行 Docker 容器by Juan Treminio
更多推荐
所有评论(0)