制作一个自己的 Tensorflow 笔记本

1,311 阅读2分钟
原文链接: www.jianshu.com

看你们玩 Tensorflow 玩得那么高兴,今天趁着 Tensorflow 正式版发布,我也来掺和一脚。每个人使用的编程语言都不同,官方这个 tensorflow/tensorflow 镜像是 Python 为基础的,我需要自己定制一下加入更多语言支持。

开始之前你得对 Jupyter Notebook、Tensorflow 基本的了解。先看一眼 Tensorflow 的 Dockerfile,还是很清晰的。

发呆... ...

好了,脑内捋了一遍,基于 Tensorflow 镜像,添加 Golang 是最方便的,因为 Tensorflow 体积庞大不想每次构建都要在安装 Tensorflow 中等待,直接基于 Tensorflow 干吧。


添加 Go 语言支持

因为 Tensorflow 基于 Ubuntu 构建,所以我们得加入 Go 语言。

# gcc for cgo
RUN apt-get update && apt-get install -y --no-install-recommends \
        g++ \
        gcc \
        libc6-dev \
        make \
        pkg-config \
    && rm -rf /var/lib/apt/lists/*

ENV GOLANG_VERSION 1.7.5
ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA256 2e4dd6c44f0693bef4e7b46cc701513d74c3cc44f2419bf519d7868b12931ac3

RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
    && echo "$GOLANG_DOWNLOAD_SHA256  golang.tar.gz" | sha256sum -c - \
    && tar -C /usr/local -xzf golang.tar.gz \
    && rm golang.tar.gz

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"

COPY go-wrapper /usr/local/bin/

以上就是 Go 语言的安装过程,一会还要精简一下,现在这样写是为了看起来舒服一些。

接下来让 Jupyter Notebook 支持 Go 语言,在去年 Gopher Gala 会议中有人展示过一个项目:Gophernotes


Gopher Gala

所以我们托这个项目的福直接为 Jupyter Notebook 添加 Go 语言支持。

# dependencies
RUN apt-get update
RUN apt-get install -y pkg-config libzmq3-dev build-essential python3-pip

# set up golang
ENV PATH /usr/local/go/bin:$PATH
ENV GOPATH /go
ENV PATH $GOPATH/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"

# install gophernotes
RUN go get golang.org/x/tools/cmd/goimports
RUN go get -tags zmq_3_x github.com/gopherds/gophernotes
RUN mkdir -p ~/.ipython/kernels/gophernotes
RUN cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes

现在整合一下,准备构建镜像。在此之前我们先到 Docker Hub 中看一下 Tensorflow 的版本情况,选择适合自己电脑的版本。

这里为了演示轻松,这里先使用 tensorflow/tensorflow:latest 这个标签构建。

FROM tensorflow/tensorflow

ENV GOLANG_VERSION 1.7.5
ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA256 2e4dd6c44f0693bef4e7b46cc701513d74c3cc44f2419bf519d7868b12931ac3
# Set up golang
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN apt-get update && apt-get install -y --no-install-recommends \
# Install gcc for cgo
        g++ \
        gcc \
        libc6-dev \
        make \
        pkg-config \
# Notebook Dependencies
        libzmq3-dev \
        build-essential \
        python3-pip \
        git && \
    rm -rf /var/lib/apt/lists/* && \
    curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz && \
    echo "$GOLANG_DOWNLOAD_SHA256  golang.tar.gz" | sha256sum -c - && \
    tar -C /usr/local -xzf golang.tar.gz && \
    rm golang.tar.gz && \
    mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" && \
    curl -fsSL https://git.io/vDyrl -o /usr/local/bin/go-wrapper && \
# Install Gophernotes
    go get golang.org/x/tools/cmd/goimports && \
    go get -tags zmq_3_x github.com/gopherds/gophernotes && \
    mkdir -p ~/.ipython/kernels/gophernotes && \
    cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes && \
    mv /notebooks/* /go

# TensorBoard
EXPOSE 6006
# IPython
EXPOSE 8888

WORKDIR "/go"

CMD ["/run_jupyter.sh"]

然后你可以先去喝一杯 Java,稍后回来。

运行

简单粗暴直接运行看能不能跑起来:

$ docker run -it -p 8888:8888 --rm zuolan/tensorflow-go

看起来没问题

详细使用

首先工作目录是 /go,启动时挂载上去就好了。需要注意的是我为了方便操作 Go 项目把工作目录设在 /go,所以如果你是完全的新手,最好把/go里面的文件复制到本地,然后再启动。
操作如下:

$ docker run -d --name=temp zuolan/tensorflow-go
$ docker cp temp:/go /你的宿主机目录

这样你就在本地有了一个基本的初始化数据文件,现在你可以删掉 temp 容器:

$ docker rm -f temp

然后正式启动:

$ docker run -dit --name=go-ai \
    -p 8888:8888 \
    -p 6006:6006 \
    -v /你的宿主机目录:/go \
    -e PASSWORD=你的密码 \
    zuolan/tensorflow-go

现在你可以愉♂悦♂地学习 Tensorflow 了,支持 Python 和 Go 的笔记本完成!


本文源代码:Dockerfile