使用Docker进行机器学习(87)与JAVA(1)的「机器学习:Java开发人员的端到端指南」一书,作者为Richard Reese,Jennifer Reese,Bostjan Kaluza,Uday Kamath和Krishna Choppella
1. 就想要立即使用的人 (jiù lì jí shǐ de
《机器学习:面向Java开发者的端到端指南》 作者:Richard Reese, Jennifer Reese, Bostjan Kaluza, Uday Kamath, Krishna Choppella
Docker:
请在Windows和Mac上安装Docker并启动。
在Windows系统中,若未启用Intel Virtualization功能,可能无法启动Docker。
另外,可能会出现安全警告等情况。
运行docker
$ docker pull kaizenjapan/anaconda2-sparkk
$ docker run -it -p 8888:8888 kaizenjapan/anaconda2-sparkk /bin/bash
在以下的shell会话中,
(base) root@f19e2f06eabb:/#是命令提示符。实际上,数字的部分可能会有所不同。请输入#右边的内容。
其他行是输出。如果输出中有错误或差异,请在评论栏等处与我们联系。
请进入每个章节的文件夹。
如果Docker容器内部和启动Docker的操作系统的Shell显示相似,可能会错误地混淆两者进行调查。请注意Docker的命令提示符。
文件共享或复制
在启动了Docker的操作系统中,可以选择进行文件共享或文件复制,以便将生成的文件在浏览器等上进行显示。请参考文献中的URL来了解具体方法。
我正在寻找在启动Docker的操作系统磁盘整理方面,哪种方法比较好。在某些方法中,我选择从一开始就进行共享设置。
在复制的情况下,执行启动docker的操作系统侧命令。请使用您的docker号码进行替换。在浏览器中展示并确认了复制的文件内容。
Java: Java is a programming language.
(base) root@6481743a5e24:/Machine-Learning-End-to-Endguide-for-Java-developers/Module 1/JavaforDataScience_Code/chapter02# mvn install -e -X -DskipTests
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.9.93-linuxkit-aufs", arch: "amd64", family: "unix"
[DEBUG] Created new class realm maven.api
[DEBUG] Importing foreign packages into class realm maven.api
[DEBUG] Imported: javax.enterprise.inject.* < plexus.core
[DEBUG] Imported: javax.enterprise.util.* < plexus.core
[DEBUG] Imported: javax.inject.* < plexus.core
[DEBUG] Imported: org.apache.maven.* < plexus.core
[DEBUG] Imported: org.apache.maven.artifact < plexus.core
[DEBUG] Imported: org.apache.maven.classrealm < plexus.core
[DEBUG] Imported: org.apache.maven.cli < plexus.core
[DEBUG] Imported: org.apache.maven.configuration < plexus.core
[DEBUG] Imported: org.apache.maven.exception < plexus.core
[DEBUG] Imported: org.apache.maven.execution < plexus.core
[DEBUG] Imported: org.apache.maven.execution.scope < plexus.core
[DEBUG] Imported: org.apache.maven.lifecycle < plexus.core
[DEBUG] Imported: org.apache.maven.model < plexus.core
[DEBUG] Imported: org.apache.maven.monitor < plexus.core
[DEBUG] Imported: org.apache.maven.plugin < plexus.core
[DEBUG] Imported: org.apache.maven.profiles < plexus.core
[DEBUG] Imported: org.apache.maven.project < plexus.core
[DEBUG] Imported: org.apache.maven.reporting < plexus.core
[DEBUG] Imported: org.apache.maven.repository < plexus.core
[DEBUG] Imported: org.apache.maven.rtinfo < plexus.core
[DEBUG] Imported: org.apache.maven.settings < plexus.core
[DEBUG] Imported: org.apache.maven.toolchain < plexus.core
[DEBUG] Imported: org.apache.maven.usability < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.* < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.authentication < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.authorization < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.events < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.observers < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.proxy < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.repository < plexus.core
[DEBUG] Imported: org.apache.maven.wagon.resource < plexus.core
[DEBUG] Imported: org.codehaus.classworlds < plexus.core
[DEBUG] Imported: org.codehaus.plexus.* < plexus.core
[DEBUG] Imported: org.codehaus.plexus.classworlds < plexus.core
[DEBUG] Imported: org.codehaus.plexus.component < plexus.core
[DEBUG] Imported: org.codehaus.plexus.configuration < plexus.core
[DEBUG] Imported: org.codehaus.plexus.container < plexus.core
[DEBUG] Imported: org.codehaus.plexus.context < plexus.core
[DEBUG] Imported: org.codehaus.plexus.lifecycle < plexus.core
[DEBUG] Imported: org.codehaus.plexus.logging < plexus.core
[DEBUG] Imported: org.codehaus.plexus.personality < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.Xpp3Dom < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlPullParser < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlPullParserException < plexus.core
[DEBUG] Imported: org.codehaus.plexus.util.xml.pull.XmlSerializer < plexus.core
[DEBUG] Imported: org.eclipse.aether.* < plexus.core
[DEBUG] Imported: org.eclipse.aether.artifact < plexus.core
[DEBUG] Imported: org.eclipse.aether.collection < plexus.core
[DEBUG] Imported: org.eclipse.aether.deployment < plexus.core
[DEBUG] Imported: org.eclipse.aether.graph < plexus.core
[DEBUG] Imported: org.eclipse.aether.impl < plexus.core
[DEBUG] Imported: org.eclipse.aether.installation < plexus.core
[DEBUG] Imported: org.eclipse.aether.internal.impl < plexus.core
[DEBUG] Imported: org.eclipse.aether.metadata < plexus.core
[DEBUG] Imported: org.eclipse.aether.repository < plexus.core
[DEBUG] Imported: org.eclipse.aether.resolution < plexus.core
[DEBUG] Imported: org.eclipse.aether.spi < plexus.core
[DEBUG] Imported: org.eclipse.aether.transfer < plexus.core
[DEBUG] Imported: org.eclipse.aether.version < plexus.core
[DEBUG] Imported: org.slf4j.* < plexus.core
[DEBUG] Imported: org.slf4j.helpers.* < plexus.core
[DEBUG] Imported: org.slf4j.spi.* < plexus.core
[DEBUG] Populating class realm maven.api
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
[DEBUG] Reading user settings from /root/.m2/settings.xml
[DEBUG] Reading global toolchains from /usr/share/maven/conf/toolchains.xml
[DEBUG] Reading user toolchains from /root/.m2/toolchains.xml
[DEBUG] Using local repository at /root/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /root/.m2/repository
[INFO] Scanning for projects...
[DEBUG] Extension realms for project org.apache.maven:standalone-pom:pom:1: (none)
[DEBUG] Looking up lifecyle mappings for packaging pom from ClassRealm[plexus.core, parent: null]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.203 s
[INFO] Finished at: 2018-10-28T15:05:16+00:00
[INFO] Final Memory: 5M/92M
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/Machine-Learning-End-to-Endguide-for-Java-developers/Module 1/JavaforDataScience_Code/chapter02). Please verify you invoked Maven from the correct directory. -> [Help 1]
org.apache.maven.lifecycle.MissingProjectException: The goal you specified requires a project to execute but there is no POM in this directory (/Machine-Learning-End-to-Endguide-for-Java-developers/Module 1/JavaforDataScience_Code/chapter02). Please verify you invoked Maven from the correct directory.
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException
(base) root@6481743a5e24:/Machine-Learning-End-to-Endguide-for-Java-developers/Module 1/JavaforDataScience_Code/chapter02#
对于希望独立搭建Docker的人来说
从这里开始,我们将记录使用上面提到的docker所采取的策略以及创建过程的步骤。
这是使用上述docker的参考资料。在执行书中接下来的内容时不需要它。
这里提供了手动构建docker/anaconda的步骤。
这不是创建dockerfile的方法。非常抱歉。
Docker – Docker容器
可以在linux、windows和mac os等操作系统上通用的使用Ubuntu、Debian等Linux系统的机制。
可以在不更改操作系统设置的情况下使用它非常方便。
可以通过相同的规范,让大量的用户使用它。
既可以使用官方开发者提供的版本,也可以使用用户根据自己需求修改的版本。本次将使用官方发布的版本,并将其调整为可以让其他用户也能使用的形式。
Python是一种高级编程语言。
我之前用Python完成了深度学习的实践。
选择使用Python的原因是,许多机器学习的机制都可以在Python中使用,并且还可以轻松地使用Python来进行诸如R等统计分析的机制。
巨蟒
Python有不同版本,如2和3,以及不同的分发方式等。
我过去一年半一直使用Anaconda来运行Python 3。
我选择使用Anaconda的原因是因为它内置了统计分析库和Jupyter Notebook。
Docker的官方发布
有Ubuntu、Debian等操作系统的官方发行版,以及GCC、Anaconda等语言的官方发行版。
通过利用这些,可以将它们注册到Docker Hub中,从而能够确认官方发行版的质量,并分享包括修改权在内的丰富信息。这里的Docker并非官方发行,而是指各个软件提供者的官方发行。
拉取 Docker 镜像
通过URL进行pull操作,实现对Docker公式的配布利用。
使用 Docker 安装 Anaconda
使用Anaconda官方提供的版本。
$ docker pull kaizenjapan/anaconda-keras
Using default tag: latest
latest: Pulling from continuumio/anaconda3
Digest: sha256:e07b9ca98ac1eeb1179dbf0e0bbcebd87701f8654878d6d8ce164d71746964d1
Status: Image is up to date for continuumio/anaconda3:latest
$ docker run -it -p 8888:8888 continuumio/anaconda3 /bin/bash
实际上,还有其他使用keras和tensorflow的推送转为拉取。
公寓
# apt update; apt -y upgrade
# apt-get install -y vim procps apt-utils sudo maven openjdk-8-jre openjdk-8-jdk
# javac -version
javac 1.8.0_181
# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
源代码 git
# git clone https://github.com/PacktPublishing/Machine-Learning-End-to-Endguide-for-Java-developers
谷歌APIs/谷歌API Java客户端
https://github.com/googleapis/google-api-java-client
mkdir /tmp/foo && cd /tmp/foo
wget https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/8.3.0/play-services-basement-8.3.0.aar
unzip play-services-basement-8.3.0.aar
mvn install:install-file \
-Dfile=classes.jar \
-DgroupId=com.google.android.google-play-services \
-DartifactId=google-play-services \
-Dversion=1 \
-Dpackaging=jar
cd -
# we need the google-http-java-client jar cached locally
git clone https://github.com/google/google-http-java-client.git
cd google-http-java-client && mvn compile && mvn install && cd ..
# we need the google-oauth-java-client jar cached locally
git clone https://github.com/google/google-oauth-java-client.git
cd google-oauth-java-client && mvn compile && mvn install
编译日志非常大,大小为700KB。我将它放在https://bit.ly/2Ohupao上。
将注册到Docker Hub
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
caef766a99ff continuumio/anaconda3 "/usr/bin/tini -- /b…" 10 hours ago Up 10 hours 0.0.0.0:8888->8888/tcp sleepy_bassi
$ docker commit caef766a99ff kaizenjapan/anaconda2-spark
$ docker push kaizenjapan/anaconda2-sparkk
The push refers to repository [docker.io/kaizenjapan/anaconda2-sparkk]
52b69a71c0ec: Pushing [> ] 28.37MB/1.855GB
5eab22f6c054: Mounted from kaizenjapan/anaconda2-spark
0c4a9d6af7b0: Mounted from kaizenjapan/anaconda2-spark
9bd66f1ffc09: Mounted from kaizenjapan/anaconda2-spark
5048be0c0a05: Mounted from kaizenjapan/anaconda2-spark
1ecb0ee91526: Mounted from kaizenjapan/anaconda2-spark
ab39eed3db29: Mounted from kaizenjapan/anaconda2-spark
b28ef0b6fef8: Mounted from kaizenjapan/r-master
参考文献
Java (请只提供一种选项):
【新手向导】建立Java执行环境
https://qiita.com/chihiro/items/2fd82780253075e699b1
在最新的Ubuntu上安装OpenJDK(Java)
https://qiita.com/terappy/items/537c069923144a9d9755
机器学习
正在创建一个目标为100个的书籍和资源清单,关于为什么要在Docker上进行机器学习。
使用Docker和anaconda进行机器学习,参考斎藤康毅所撰写的《从零开始构建深度学习 – 使用Python学习深度学习的理论与实现》。链接:https://qiita.com/kaizen_nagoya/items/a7e94ef6dca128d035ab
使用Docker和Anaconda进行机器学习的教程”从零开始的Deep Learning2自然语言处理版”,由斎藤康毅撰写,链接如下:
https://qiita.com/kaizen_nagoya/items/3b80dfc76933cea522c6
使用docker和anaconda进行机器学习的相关内容,书籍是《直觉深度学习》,作者是Antonio Gulli和Sujit Pal,涉及第1章和第2章。链接:https://qiita.com/kaizen_nagoya/items/483ae708c71c88419c32
通过Docker建立机器学习环境时,总是遇到各种错误。
使用 Docker 在 Windows 上构建机器学习(72) 环境。
https://qiita.com/kaizen_nagoya/items/c4daa5cf52e9f0c2c002
使用docker来构建机器学习(73)环境的docker/linux/macos bash脚本和ms-dos batch文件。详细信息请查看链接:https://qiita.com/kaizen_nagoya/items/3f7b39110b7f303a5558
在 Docker 中搭建机器学习环境,R 的难度有多大?
使用Docker构建机器学习(75)环境(5),管理Docker相关文件。链接:https://qiita.com/kaizen_nagoya/items/4f03df9a42c923087b5d
我尝试在Python中运行OpenCV时遇到了”libGL.so”不存在的问题,但已经解决了。你可以参考这篇文章:https://qiita.com/toshitanian/items/5da24c0c0bd473d514c8
在服务器端使用matplotlib进行绘图的技巧
https://qiita.com/TomokIshii/items/3a26ee4453f535a69e9e
使用Docker在主机和容器之间进行文件复制。
在Mac上使用Docker进行文件共享
「名古屋的IoT在名古屋的操作系统中」该如何从何处开始使用Docker呢?RaspberryPi上的TOPPERS/FMP与Macintosh的5个关卡。
https://qiita.com/kaizen_nagoya/items/9c46c6da8ceb64d2d7af
64位CPU之路和/或64岁的决心
《从零开始的Deep Learning 2:自然语言处理篇》读书会的进行方式(示例)
https://qiita.com/kaizen_nagoya/items/025eb3f701b36209302e
尝试使用 Ubuntu 16.04 LTS 中的 NVIDIA Docker。
文件历史
版本0.10 第一版 20181028
谢谢您一直阅读到最后。
喜欢的话,请关注一下。
非常感谢你阅读到最后一句话。
请点击?喜欢的图标并关注我,享受快乐生活。