在 SageMaker 上安装持久化的 Julia 环境
通过跨重启持久化 Anaconda 环境,充分利用 SageMaker
照片由爱丽丝·多诺万·劳斯在 Unsplash
SageMaker 是一个很好的环境,让数据科学家探索新的语言和方法,而不必太担心底层基础设施。只要您不需要定制现有的环境,一切看起来都很棒,而且运行正常。然而,一旦你想冒险离开人迹罕至的道路,你就会遇到一些意想不到的挑战。
我们的数据科学家通常有成本意识,当他们不使用 SageMaker 实例时,会很高兴地停止它们。不幸的是,SageMaker 不会持久保存任何写在~/SageMaker
目录之外的数据。这意味着对 Anaconda 环境的更改不会在笔记本重启后持续。这非常令人沮丧。为了解决这个问题,我们需要在~/SageMaker
文件夹中创建一个持久的 Anaconda 环境,并告诉 Julia 把它的包也放在那里。我们开始吧!
登录到您的 SageMaker 环境并打开一个新的终端会话。让我们创建一个新的空的 Anaconda 环境,位于~/SageMaker
目录中。
conda create --yes --prefix ~/SageMaker/envs/julia
下载并解压 Julia 的最新版本
curl --silent [https://julialang-s3.julialang.org/bin/linux/x64/1.5/julia-1.5.0-linux-x86_64.tar.gz](https://julialang-s3.julialang.org/bin/linux/x64/1.4/julia-1.4.2-linux-x86_64.tar.gz) | tar xzf -
cp -R julia-1.5.0/* ~/SageMaker/envs/julia/
在我们开始为 Julia 安装软件包之前,我们需要确保 Julia 正在从正确的目录加载它的软件包。这也确保了您通过笔记本或终端安装的包也将存储在 SageMaker 实例的持久空间中。
mkdir -p ~/SageMaker/envs/julia/etc/conda/activate.decho 'export JULIA_DEPOT_PATH=~/SageMaker/envs/julia/depot' >> ~/SageMaker/envs/julia/etc/conda/activate.d/env.shecho -e 'empty!(DEPOT_PATH)\npush!(DEPOT_PATH,raw"/home/ec2-user/SageMaker/envs/julia/depot")' >> ~/SageMaker/envs/julia/etc/julia/startup.jl
我们现在可以激活环境并开始安装我们的依赖项,包括 IJulia。启动茱莉亚·REPL,安装并激活伊茱莉亚。
juliausing Pkg
Pkg.add("IJulia")
using IJulia
退出 REPL (Ctrl + D)并打开 Jupyter 或 JupyterLabs。新的 Julia 1.5.0 内核现在应该是可见的,您已经准备好了。
重启 SageMaker 实例后,您会注意到 Julia 内核已经消失了。要恢复内核,只需执行
conda run --prefix ~/SageMaker/envs/julia/ julia --eval 'using IJulia; IJulia.installkernel("Julia")'
您可以随心所欲地将这个脚本注册为笔记本生命周期配置,每当 SageMaker 实例启动时就会自动执行。你可以在 https://docs . AWS . Amazon . com/sage maker/latest/DG/notebook-life cycle-config . html 找到更多关于如何设置的详细信息。
在 Windows 10 上安装 Apache Hive 3.1.2
在 Windows 10 操作系统上安装 Apache Hive 3.1.2 的分步指南
在进行一个项目时,我们被要求在 Windows 10 操作系统上安装 Apache Hive。网上找到了许多指南,但不幸的是,它们不起作用。为此,我决定写一个循序渐进的指南来帮助别人。
本指南的起点是我在 Youtube 上找到的一个很棒的视频,它提供了 Hive 2.x 的一个工作场景,没有太多细节。
本文是我们在 TowardsDataScience.com 上发布的系列文章的一部分,旨在说明如何在 Windows 操作系统上安装大数据技术。
本系列其他发表文章:
1.先决条件
1.1.7zip
为了提取 tar.gz 档案,你应该安装7 压缩工具。
1.2.安装 Hadoop
要安装 Apache Hive,必须安装并运行 Hadoop 集群:可以参考我们之前发布的分步指南,在 Windows 10 上安装 Hadoop 3.2.1。
1.3.阿帕奇德比
此外,Apache Hive 需要一个关系数据库来创建它的 Metastore(所有元数据都将存储在这里)。在本指南中,我们将使用 Apache Derby 数据库 4。
既然我们已经安装了 Java 8,我们必须安装 Apache Derby 10.14.2.0 版本(查看下载页面),可以从下面的链接下载。
下载后,我们必须解压两次*(使用 7zip:第一次解压. tar.gz 文件,第二次解压。tar file)* 将 db-derby-10.14.2.0-bin.tar.gz 的内容归档到所需的安装目录下。由于在上一个指南中,我们已经在“E:\hadoop-env\hadoop-3.2.1”目录中安装了 Hadoop,因此我们将 Derby 提取到“E:\ Hadoop-env \ d b-Derby-10 . 14 . 2 . 0”目录中。
1.4.Cygwin
因为有一些 Hive 3.1.2 工具与 Windows 不兼容(比如 schematool)。我们将需要 Cygwin 工具来运行一些 Linux 命令。
2.下载 Apache Hive 二进制文件
为了下载 Apache Hive 二进制文件,你应该去下面的网站:【https://downloads.apache.org/hive/hive-3.1.2/】T2。然后,下载 apache-hive-3.1.2。-bin.tar.gz 文件。
图 1—apache-hive.3.1.2-bin.tar.gz 文件
文件下载完成后,我们应该将两次*(如上所述)*apache-hive.3.1.2-bin.tar.gz 归档文件解压到“E:\hadoop-env\ Apache-hive-3 . 1 . 2”目录中(因为我们决定使用 E:\ Hadoop-env \ "作为上一指南中使用的所有技术的安装目录。
3.设置环境变量
提取 Derby 和 Hive 档案后,我们应该进入控制面板>系统和安全>系统。然后点击“高级系统设置”。
图 2-高级系统设置
在高级系统设置对话框中,点击“环境变量”按钮。
图 3 —打开环境变量编辑器
现在我们应该添加以下用户变量:
图 4 —添加用户变量
- HIVE _ HOME:" E:\ Hadoop-env \ Apache-HIVE-3 . 1 . 2 \ "
- DERBY _ HOME:" E:\ Hadoop-env \ d b-DERBY-10 . 14 . 2 . 0 \ "
- HIVE_LIB: "%HIVE_HOME%\lib "
- HIVE_BIN: "%HIVE_HOME%\bin "
- HADOOP _ USER _ class path _ FIRST:" true "
图 5 —添加 HIVE_HOME 用户变量
此外,我们应该添加以下系统变量:
- HADOOP _ USER _ class path _ FIRST:" true "
现在,我们应该编辑 Path 用户变量以添加以下路径:
- %HIVE_BIN%
- %DERBY_HOME%\bin
图 6 —编辑路径环境变量
4.正在配置配置单元
4.1.复制 Derby 库
现在,我们应该转到 Derby 库目录(E:\ Hadoop-env \ d b-Derby-10 . 14 . 2 . 0 \ lib)并复制所有*。jar 文件。
图 7 —复制 Derby 库
然后,我们应该将它们粘贴到配置单元库目录中(E:\ Hadoop-env \ Apache-Hive-3 . 1 . 2 \ lib)。
图 8 —在配置单元库目录中粘贴 Derby 库
4.2.配置 hive-site.xml
现在,我们应该转到 Apache Hive 配置目录(E:\ Hadoop-env \ Apache-Hive-3 . 1 . 2 \ conf)创建一个新文件“hive-site.xml”。我们应该将以下 XML 代码粘贴到该文件中:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property> <name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby://localhost:1527/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property><property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.ClientDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<description>Enable user impersonation for HiveServer2</description>
<value>true</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
<description> Client authentication types. NONE: no authentication check LDAP: LDAP/AD based authentication KERBEROS: Kerberos/GSSAPI authentication CUSTOM: Custom authentication provider (Use with property hive.server2.custom.authentication.class) </description>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>True</value>
</property>
</configuration>
5.启动服务
5.1.Hadoop 服务
要启动 Apache Hive,请以管理员身份打开命令提示符实用程序。然后,使用 start-dfs 和 start-yarn 命令启动 Hadoop 服务(如 Hadoop 安装指南中所示)。
5.2.Derby 网络服务器
然后,我们应该使用以下命令在本地主机上启动 Derby 网络服务器:
E:\hadoop-env\db-derby-10.14.2.0\bin\StartNetworkServer -h 0.0.0.0
6.正在启动 Apache Hive
现在,让我们尝试打开一个命令提示工具,转到配置单元二进制文件目录(E:\ Hadoop-env \ Apache-Hive-3 . 1 . 2 \ bin)并执行以下命令:
hive
我们将收到以下错误:
'hive' is not recognized as an internal or external command, operable program or batch file.
由于 Hive 3.x 版本不是为 Windows 构建的(仅在某些 Hive 2.x 版本中),因此会引发此错误。为了让事情顺利进行,我们应该下载必要的*。来自以下链接的 cmd 文件:https://SVN . Apache . org/repos/ASF/hive/trunk/bin/。请注意,您应该保留文件夹层次结构(bin\ext\util)。
您可以下载所有*。来自以下 GitHub 存储库的 cmd 文件
- https://github.com/HadiFadl/Hive-cmd
现在,如果我们尝试执行“hive”命令,我们将收到以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:518)
at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:536)
at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:430)
at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5104)
at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
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.apache.hadoop.util.RunJar.run(RunJar.java:318)
at org.apache.hadoop.util.RunJar.main(RunJar.java:232)
这个错误是由于下面的 Hive 问题链接中提到的一个错误引起的: HIVE-22718 。
评论中提到,这个问题可以通过将“E:\ hadoop-env \ Apache-hive-3 . 1 . 2 \ lib”中存储的 guava-19.0.jar 替换为“E:\ Hadoop-env \ Hadoop-3 . 2 . 1 \ share \ Hadoop \ HDFS \ lib”中找到的 Hadoop 的 guava-27.0-jre.jar 来解决。
注意:这个文件也被上传到上面提到的 GitHub 存储库中。
现在,如果我们再次运行 hive 命令,那么 Apache Hive 将成功启动。
图 9 —启动 Apache Hive
7.正在初始化配置单元
在确保 Apache Hive 成功启动后。我们可能无法运行任何 HiveQL 命令。这是因为 Metastore 尚未初始化。此外,HiveServer2 服务必须正在运行。
要初始化 Metastore,我们需要使用与 windows 不兼容的 schematool 实用程序。为了解决这个问题,我们将使用 Cygwin 实用程序,它允许从 windows 执行 Linux 命令。
7.1.创建符号链接
首先,我们需要创建以下目录:
- E:\cygdrive
- C:\cygdrive
现在,以管理员身份打开命令提示符并执行以下命令:
mklink /J E:\cygdrive\e\ E:\
mklink /J C:\cygdrive\c\ C:\
这些符号链接是正确使用 Cygwin 实用程序所必需的,因为 Java 可能会导致一些问题。
7.2.正在初始化配置单元 Metastore
打开 Cygwin 实用程序并执行以下命令来定义环境变量:
export HADOOP_HOME='/cygdrive/e/hadoop-env/hadoop-3.2.1'
export PATH=$PATH:$HADOOP_HOME/bin
export HIVE_HOME='/cygdrive/e/hadoop-env/apache-hive-3.1.2'
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*.jar
我们可以将这些行添加到“~/”中。bashrc”文件,这样你就不需要每次打开 Cygwin 时都写它们。
现在,我们应该使用 schematool 实用程序来初始化 Metastore:
$HIVE_HOME/bin/schematool -dbType derby -initSchema
7.3.正在启动 HiveServer2 服务
现在,打开命令提示符并运行以下命令:
hive --service hiveserver2 start
我们应该让这个命令提示符处于打开状态,并打开一个新的命令提示符,我们应该使用下面的命令启动 Apache Hive:
hive
7.4.启动 WebHCat 服务(可选)
在我们正在进行的项目中,我们需要从 SQL Server Integration Services 执行 HiveQL 语句,该语句可以从 WebHCat 服务器访问 Hive。
要启动 WebHCat 服务器,我们应该打开 Cygwin 实用程序并执行以下命令:
$HIVE_HOME/hcatalog/sbin/webhcat_server.sh start
8.参考
- Stackoverflow.com 问答网站
- 阿帕奇蜂巢官网
- YouTube:WINDOWS 上的简易 HIVE 安装
- kon text . tech:Windows 10 上 Apache Hive 3.0.0 安装分步指南
在 Windows 10 上安装 Apache Pig 0.17.0
本文是我们在 TowardsDataScience.com 上发布的系列文章的一部分,旨在说明如何在 Windows 操作系统上安装大数据技术。
之前发布:
在本文中,我们将提供在 Windows 10 上安装 Apache Pig 0.17.0 的分步指南。
1.先决条件
1.1.Hadoop 集群安装
Apache Pig 是基于 Hadoop 构建的平台。可以参考我们之前发表的文章,在 Windows 10 上安装 Hadoop 单节点集群。
注意 Apache Pig 最新版本 0.17.0 支持 Hadoop 2.x 版本和仍然面临一些与 Hadoop 3.x 的兼容性问题。在本文中,我们将只说明安装,因为我们使用的是 Hadoop 3.2.1
1.2.7zip
7 需要 zip 来解压缩我们将在本指南中下载的. tar.gz 归档文件。
2.下载阿帕奇猪
要下载 Apache Pig,您应该访问以下链接:
图 1 — Apache Pig 发布目录
如果你正在寻找最新版本,导航到“最新”目录,然后下载 pig-x.xx.x.tar.gz 文件。
图 2 —下载 Apache Pig 二进制文件
文件下载后,我们应该用 7zip *解压两次(用 7zip:第一次解压. tar.gz 文件,第二次解压。tar 文件)。*我们将把 Pig 文件夹提取到“E:\hadoop-env”目录中,就像在以前的文章中使用的那样。
3.设置环境变量
提取 Derby 和 Hive 档案后,我们应该进入控制面板>系统和安全>系统。然后点击“高级系统设置”。
图 3-高级系统设置
在高级系统设置对话框中,点击“环境变量”按钮。
图 4 —打开环境变量编辑器
现在我们应该添加以下用户变量:
图 5 —添加用户变量
- PIG _ HOME:" E:\ Hadoop-env \ PIG-0 . 17 . 0 "
图 6 —添加 PIG_HOME 变量
现在,我们应该编辑 Path 用户变量以添加以下路径:
- %PIG_HOME%\bin
图 7 —编辑路径变量
4.启动阿帕奇猪
设置完环境变量后,我们来试着运行 Apache Pig。
注意 : Hadoop 服务必须正在运行
以管理员身份打开命令提示符,并执行以下命令
pig -version
您将收到以下异常:
'E:\hadoop-env\hadoop-3.2.1\bin\hadoop-config.cmd' is not recognized as an internal or external command,
operable program or batch file.
'-Xmx1000M' is not recognized as an internal or external command,
operable program or batch file.
图 8-清管器异常
要修复此错误,我们应该编辑位于“pig-0.17.0\bin”目录中的 pig.cmd 文件,方法是将 HADOOP_BIN_PATH 值从“%HADOOP_HOME%\bin”更改为“%HADOOP_HOME%\libexec”。
现在,让我们再次尝试运行“pig -version”命令:
图 9-清管器安装已验证
编写 PigLatin 语句最简单的方法是使用 Grunt shell,这是一个交互式工具,我们可以在其中编写语句并获得所需的输出。有两种模式涉及 Grunt Shell:
- 本地:所有脚本都在一台机器上执行,不需要 Hadoop。(命令:pig -x local)
- MapReduce:在 Hadoop 集群上执行脚本(命令:pig -x MapReduce)
由于我们安装了与 Pig 0.17.0 不兼容的 Apache Hadoop 3.2.1,我们将尝试使用本地模式运行 Pig。
图 10 —在本地模式下启动 Grunt Shell
5.参考
- Stackoverflow.com 问答网站
- 阿帕奇猪官网
- 解决方案 Mandi: 在 Windows 10 上安装 Pig
10 分钟在谷歌云平台上安装 CUDA
剥离支持 GPU 的实例的 4 步指南
最近,我花了相当多的时间在谷歌云平台(GCP)上建立我的 CUDA 实例。在大量的错误和文章之后,我发现如果我第一次就发现了正确的设置过程的话,这本来可以很快完成的!
所以我决定写这篇文章来让你的 CUDA 实例在几分钟内运行起来。到这篇文章结束时,你将在 GCP 上安装 CUDA 10.0、cuDNN 7.6.5 和 Ubuntu 16.04。
第 0 步:在谷歌云平台(GCP)上创建一个免费账户
在谷歌云平台上创建一个免费账户。输入您的信用卡详细信息并验证。你将获得 300 美元的信用。
要使用 GPU,您需要将升级到付费账户,并增加您的 GPU 配额。如果您还没有经过验证的升级帐户,这一步可能需要一些时间(通常为 1-2 天)。
步骤 1:在 GCP 上设置一个虚拟机实例
选择一个项目。我选择了“我的第一个项目”
在您的项目中创建一个 VM 实例。点击“创建”。
选择您需要的 CPU 内核数量,以及您想要的 GPU。我选择了‘n1-standard-8’CPU 和一个‘P100 GPU’。
设置 CPU 和 GPU 类型和数量
选择 OS 为 Ubuntu 16.04 和引导盘大小。200 GB 是推荐的大小。
设置操作系统类型和引导磁盘大小
勾选防火墙规则,然后点击“管理、安全、磁盘、网络、单独租赁”。
更改防火墙设置
禁用“磁盘”下的引导磁盘删除选项
取消启动磁盘删除检查
点击最后的 create ,你的实例就准备好了!
点击 SSH 打开一个终端。您的实例应该正在运行。
单击 SSH 以连接到终端
不要关闭终端。您将在这个终端中安装 CUDA 和 cuDNN,而不是在您的本地桌面终端中。
警惕!!您的实例现在已经启动并运行。你被起诉了。如果你的使用超过 300 美元信用,你将不得不支付余额。不要忘记在不使用时停止实例。
第二步:安装 CUDA
我给 Ubuntu1604 装了 CUDA 10.0。你也可以安装其他的 CUDA 版本并相应地编辑下面的代码。
Ubuntu 16.04 上的 CUDA 10.0
你可能会得到 libcudnn.so 此时不是符号链接错误。查看这篇文章底部的解决方案
第三步:安装T5 cud nn
你需要在 Nvidia 上免费创建一个开发者账户。
Ubuntu 16.04 上的 CuDNN 7.6.5
要验证 CUDA 10.0 安装,请运行以下命令。它应该打印安装的 CUDA 版本。
nvcc -V
恭喜你!您成功安装了 CUDA 10.0
完整的代码便于参考。
**第四步:**安装 Tensorflow 等软件包
可以安装 Tensorflow 和基本的 python 包,比如 ipython 和 pip 。
安装 tensorflow 和 python 包
警惕!!不要忘记停止实例!
注意:
在sudo ldconfig
上,您可能会得到以下错误:
/usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link
这是因为 libcudnn.so.5 和 libcudnn.so 不是符号链接。你可以在这里阅读详情。
要解决该错误,请执行以下步骤:
libcudnn.so 符号链接错误
我们关于在 Google 云平台上设置支持 CUDA 的 VM 实例的快速帖子到此结束。
我希望你喜欢这个技术性更强的帖子!
在 Windows 10 的 Visual Studio 代码中安装 GitHub
VS 代码/ GitHub
将 GitHub 与 VS 代码集成的分步安装指南。
照片由 iambipin 拍摄
isual Studio Code 已经成为全球大多数开发人员的首选代码编辑器。它的受欢迎程度每时每刻都在飙升。这要归功于它吸引人的一系列特性,如智能感知,这些特性使它成为开发人员不可或缺的工具。
和 VS 代码一样,GitHub 对于开发者社区也是必不可少的。因此,知道如何在 Visual Studio 代码中安装 GitHub 是非常重要的。对于外行来说,GitHub 是一个基于 Git 版本控制系统的基于 web 的托管服务。
在安装之前,检查 Git 是否安装在 Windows 上是必不可少的。要进行验证,请通过按 windows 键和 r 键打开 Windows 的命令提示符。
在命令提示符中,键入 git-version 以了解安装的 Git 版本。如果没有安装 Git,命令提示符将返回一条消息,如下图所示。
现在打开 VS 代码,进入它的活动栏的源代码控制。在没有 Git 的系统中,将显示“没有注册源代码管理提供程序”消息。
Windows 安装
让我们从 https://git-scm.com/downloads 的下载 git。
运行。从 Git 网站下载的. exe 文件。按照下面给出的镜像顺序在 Windows 10 中安装 Git。
现在已经安装了 Git,让我们通过打开 Git Bash 来验证这一点。
使用 VS 代码从 GitHub 克隆一个 repo
第一步:在 GitHub 中选择一个库,点击右上角的绿色按钮克隆或下载。复制出现在下拉栏上的链接。
步骤 2: 打开 VS 代码,转到文件- >将文件夹添加到工作区…
添加新创建的文件夹。
VS 代码界面将类似于下图:
**第三步:**打开终端。
步骤 4: 要链接您的 GitHub 帐户,请键入git config-global user . name<GitHub 用户 ID >
步骤 5: 键入 git 克隆< url 在步骤 1 > 中从 GitHub 复制一个 repo 使用 VS 代码。
安装完成后,VS 代码用户界面将如下图所示。
转到活动栏的源代码控制,验证 Git 是否已经正确安装。如果安装正确,UI 将类似于下图(源代码控制:GIT 可以在底层图像的左上角看到)。
附加注释
要从当前工作目录(CWD)打开 VS 代码,有下面提到的两种方法:
方法一:打开命令提示符(Windows 键+ R >键入 cmd)。然后通过 cd <路径转到所需目录>
然后键入 代码。 在命令提示符下打开 VS 代码。
您可以通过打开终端并检查 Windows Powershell 来验证这一点。
方法二 : 文件>打开文件夹……
选择所需的文件夹。
那么当前工作目录将是所选的文件夹。
我希望这些信息对你们有所帮助。编码快乐!!!
在 Windows 10 上安装 Hadoop 3.2.1 单节点集群
两年前在做一个项目的时候,我写了一个在 Ubuntu 16.04 操作系统上安装 Hadoop 3.1.0 的分步指南。由于我们目前正在进行一个新项目,需要在 Windows 10 上安装 Hadoop 集群,我决定为这个过程编写一个指南。
本文是我们在 TowardsDataScience.com 上发布的系列文章的一部分,旨在说明如何在 Windows 操作系统上安装大数据技术。
本系列其他发表文章:
1.先决条件
首先,我们需要确保安装了以下先决条件:
1.Java 8 运行时环境(JRE): Hadoop 3 需要安装 Java 8。我更喜欢使用离线安装程序。
3.为了解压下载的 Hadoop 二进制文件,我们应该安装 7zip 。
4.我将在本地机器上创建一个文件夹“E:\hadoop-env”来存储下载的文件。
2.下载 Hadoop 二进制文件
第一步,从官网下载 Hadoop 二进制。二进制包的大小约为 342 MB。
图 1 — Hadoop 二进制文件下载链接
完成文件下载后,我们应该使用 7zip int 分两步解压软件包。首先,我们应该提取 hadoop-3.2.1.tar.gz 库,然后,我们应该解压缩提取的 tar 文件:
图 2 —使用 7zip 提取 hadoop-3.2.1.tar.gz 包
图 3 —提取的 hadoop-3.2.1.tar 文件
图 4 —提取 hadoop-3.2.1.tar 文件
tar 文件提取可能需要几分钟才能完成。最后,您可能会看到一些关于符号链接创建的警告。请忽略这些警告,因为它们与 windows 无关。
图 5-符号链接警告
解包后,我们要添加 Hadoop 原生 IO 库,可以在下面的 GitHub 库找到:https://github.com/cdarlint/winutils。
由于我们正在安装 Hadoop 3.2.1,我们应该下载位于https://github . com/cdarlint/winutils/tree/master/Hadoop-3 . 2 . 1/bin中的文件,并将其复制到“hadoop-3.2.1\bin”目录中。
3.设置环境变量
安装 Hadoop 及其先决条件后,我们应该配置环境变量来定义 Hadoop 和 Java 默认路径。
要编辑环境变量,请转到控制面板>系统和安全>系统(或右键单击>我的电脑上的属性图标),然后单击“高级系统设置”链接。
图 6 —打开高级系统设置
当“高级系统设置”对话框出现时,转到“高级”选项卡并单击位于对话框底部的“环境变量”按钮。
图 7 —高级系统设置对话框
在“环境变量”对话框中,按“新建”按钮添加一个新变量。
注意:在本指南中,我们将添加用户变量,因为我们是为单个用户配置 Hadoop。如果您希望为多个用户配置 Hadoop,您可以改为定义系统变量。
有两个变量需要定义:
1.JAVA_HOME: JDK 安装文件夹路径
2.HADOOP_HOME: Hadoop 安装文件夹路径
图 8 —添加 JAVA_HOME 变量
图 9 —添加 HADOOP_HOME 变量
现在,我们应该编辑 PATH 变量来添加 Java 和 Hadoop 二进制文件路径,如下图所示。
图 10 —编辑路径变量
图 11 —编辑路径变量
图 12—向 PATH 变量添加新路径
3.1.JAVA_HOME 设置错误
现在,让我们打开 PowerShell 并尝试运行以下命令:
hadoop -version
在本例中,由于 JAVA_HOME 路径包含空格,我收到了以下错误:
JAVA_HOME is incorrectly set
图 13 — JAVA_HOME 错误
要解决这个问题,我们应该改用 windows 8.3 路径。举个例子:
- 使用“Progra~1”而不是“程序文件”
- 使用“Progra~2”而不是“程序文件(x86)”
在将“程序文件”替换为“Progra~1”之后,我们关闭并重新打开 PowerShell,并尝试了相同的命令。如下图所示,它运行时没有错误。
图 14 — hadoop 版本命令成功执行
4.配置 Hadoop 集群
为了配置 Hadoop 集群,我们应该更改四个文件:
- % HADOOP _ HOME % \ etc \ HADOOP \ HDFS-site . XML
- % HADOOP _ HOME % \ etc \ HADOOP \ core-site . XML
- % HADOOP _ HOME % \ etc \ HADOOP \ map red-site . XML
- % HADOOP _ HOME % \ etc \ HADOOP \ yarn-site . XML
4.1.HDFS 站点配置
众所周知,Hadoop 是使用主从模式构建的。在修改 HDFS 配置文件之前,我们应该创建一个目录来存储所有主节点(名称节点)数据,并创建另一个目录来存储数据(数据节点)。在本例中,我们创建了以下目录:
- e:\ Hadoop-env \ Hadoop-3 . 2 . 1 \ data \ DFS \ NameNode
- e:\ Hadoop-env \ Hadoop-3 . 2 . 1 \ data \ DFS \ datanode
现在,让我们打开位于“%HADOOP_HOME%\etc\hadoop”目录中的“hdfs-site.xml”文件,我们应该在 元素中添加以下属性:
<property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:///E:/hadoop-env/hadoop-3.2.1/data/dfs/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:///E:/hadoop-env/hadoop-3.2.1/data/dfs/datanode</value></property>
请注意,我们已经将复制因子设置为 1,因为我们正在创建单节点集群。
4.2.核心站点配置
现在,我们应该配置名称节点 URL,将以下 XML 代码添加到“core-site.xml”内的 元素中:
<property><name>fs.default.name</name><value>hdfs://localhost:9820</value></property>
4.3.地图简化站点配置
现在,我们应该将下面的 XML 代码添加到“mapred-site.xml”中的 元素中:
<property><name>mapreduce.framework.name</name><value>yarn</value><description>MapReduce framework name</description></property>
4.4.纱线位置配置
现在,我们应该将下面的 XML 代码添加到“yarn-site.xml”中的 元素中:
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>Yarn Node Manager Aux Service</description></property>
5.格式化名称节点
完成配置后,让我们尝试使用以下命令格式化名称节点:
hdfs namenode -format
由于 Hadoop 3.2.1 版本中的错误,您将收到以下错误:
2020–04–17 22:04:01,503 ERROR namenode.NameNode: Failed to start namenode.java.lang.UnsupportedOperationExceptionat java.nio.file.Files.setPosixFilePermissions(Files.java:2044)at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.clearDirectory(Storage.java:452)at org.apache.hadoop.hdfs.server.namenode.NNStorage.format(NNStorage.java:591)at org.apache.hadoop.hdfs.server.namenode.NNStorage.format(NNStorage.java:613)at org.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:188)at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:1206)at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1649)at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1759)2020–04–17 22:04:01,511 INFO util.ExitUtil: Exiting with status 1: java.lang.UnsupportedOperationException2020–04–17 22:04:01,518 INFO namenode.NameNode: SHUTDOWN_MSG:
这个问题将在下一个版本中解决。目前,您可以使用以下步骤暂时修复它(参考):
- 从下面的链接下载 hadoop-hdfs-3.2.1.jar 文件。
- 将文件夹% HADOOP _ HOME % \ share \ HADOOP \ HDFS 中的文件名 hadoop-hdfs-3.2.1.jar 重命名为 hadoop-hdfs-3.2.1.bak
- 将下载的 hadoop-hdfs-3.2.1.jar 复制到文件夹% HADOOP _ HOME % \ share \ HADOOP \ HDFS
现在,如果我们尝试重新执行 format 命令(以管理员身份运行命令提示符或 PowerShell),您需要批准文件系统格式。
图 15 —文件系统格式批准
并且命令成功执行:
图 16 —成功执行的命令
6.启动 Hadoop 服务
现在,我们将打开 PowerShell,并导航到“%HADOOP_HOME%\sbin”目录。然后,我们将运行以下命令来启动 Hadoop 节点:
.\start-dfs.cmd
图 17 —启动 Hadoop 节点
将打开两个命令提示符窗口(一个用于名称节点,一个用于数据节点),如下所示:
图 18 — Hadoop 节点命令提示符窗口
接下来,我们必须使用以下命令启动 Hadoop Yarn 服务:
./start-yarn.cmd
图 19 —启动 Hadoop 纱线服务
将打开两个命令提示符窗口(一个用于资源管理器,一个用于节点管理器),如下所示:
图 20—节点管理器和资源管理器命令提示符窗口
为了确保所有服务都成功启动,我们可以运行以下命令:
jps
它应该显示以下服务:
14560 DataNode
4960 ResourceManager
5936 NameNode
768 NodeManager
14636 Jps
图 21 —执行 jps 命令
7.Hadoop Web 用户界面
有三种网络用户界面可供使用:
图 22 —名称节点网页
图 23 —数据节点网页
图 24 —纱线网页
8.参考
- Hadi Fadlallah,在 Ubuntu 16.04 上逐步安装 Hadoop 3.1.0 多节点集群,TowardsDataScience.com
- Jozef Jarosciak ,如何在 Windows 10 上安装 Hadoop 单节点集群
- Raymond Tang,在 Windows 10 上安装 Hadoop 3.2.1 分步指南,kontext.tech
- 栈溢出问答网站
在 Mac 上安装 Hadoop
你需要的唯一向导!
马库斯·斯皮斯克在 Unsplash 上的照片
难道是你和 Hadoop 之间唯一的障碍,只是想知道如何在 Mac 上安装它吗?一个快速的互联网搜索会告诉你缺乏关于这个相当简单的过程的信息。在这个简短的教程中,我将向您展示如何在伪分布式模式下使用单节点集群的终端在一个 macOS Mojave (版本 10.14.6 )上非常容易地安装 Hadoop 3.2.1 。
首先,您需要安装几个需要放在适当目录中的包。 家酿网站让这个任务变得非常简单,自动确定你的机器上需要什么,安装正确的目录并把它们的文件符号链接到/user/local。其他文档也可以在他们的网站上找到。
安装自制软件
复制页面顶部的命令并粘贴到新的终端窗口中。将会通知您将要安装的内容。按回车键启动该过程:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
确认您的机器上有正确的 java 版本(版本 8)。如果它返回的不是 1.8。,请确保安装正确的版本。
$ java -version$ brew cask install homebrew/cask-versions/adoptopenjdk8
安装 Hadoop
接下来,您将在以下路径安装最新版本的 Hadoop:/usr/local/Cellar/Hadoop。在撰写本文时,这恰好是 3.2.1:
$ brew install hadoop
配置 Hadoop
配置 Hadoop 需要几个步骤。关于设置单节点集群的更详细版本可以在 Apache Hadoop 文档 中找到。(确保遵循机器上安装的正确版本。)
- 更新环境变量设置
- 对 core -、 hdfs -、 mapred -和 yarn -site.xml 文件进行更改
- 取消密码要求(如有必要)
- 格式命名节点
打开包含环境变量设置的文档:
$ cd /usr/local/cellar/hadoop/3.2.1/libexec/etc/hadoop
$ open hadoop-env.sh
对文档进行以下更改,保存并关闭。
添加导出 JAVA_HOME 的位置
export JAVA _ HOME = "/Library/JAVA/JAVA virtual machines/adopt open JDK-8 . JDK/Contents/HOME "
您可以通过在终端窗口中使用以下代码来找到此路径:
$ /usr/libexec/java_home
替换导出 HADOOP_OPTS 的信息
更改导出 HADOOP _ OPTS = "-DJ ava . net . preferipv 4 stack = true "
要导出 HADOOP _ OPTS = "-djava . net . preferipv 4 stack = true-djava . security . krb5 . realm =-djava . security . krb5 . KDC = "
对核心文件进行更改
$ open core-site.xml<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
对 hdfs 文件进行更改
$ open hdfs-site.xml<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
对映射的文件进行更改
$ open mapred-site.xml<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
对纱线文件进行更改
$ open yarn-site.xml
<属性>
<名称>YARN . nodemanager . aux-services</名称>
<值>MapReduce _ shuffle</值>
</属性>
<属性>
<名称>YARN . nodemanager . env-whitelist</名称>
值【JAVA _ JAVA
删除密码要求
在进入下一步之前,检查您是否能够在没有密码的情况下进行 ssh,以防止格式化 NameNode 时出现意外结果。
$ ssh localhost
如果这没有返回上次登录时间,请使用以下命令来消除插入密码的需要。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
格式化 NameNode
$ cd /usr/local/cellar/hadoop/3.2.1/libexec/bin
$ hdfs namenode -format
一条警告将告诉您正在创建日志目录。系统将提示您重新格式化存储目录根目录中的文件系统。说出 Y 并按下返回。
运行 Hadoop
$ cd /usr/local/cellar/hadoop/3.2.1/libexec/sbin
$ ./start-all.sh
$ jps
运行 jps 后,您应该确认 Hadoop 的所有部分都已安装并运行。您应该会看到类似这样的内容:
66896 ResourceManager
66692 SecondaryNameNode
66535 DataNode
67350 Jps
66422 NameNode67005 NodeManager
打开 web 浏览器查看当前会话的配置。
关于您当前 Hadoop 会话的信息。
关闭 Hadoop
全部完成后关闭 Hadoop。
$ ./stop-all.sh
我希望这篇短文已经帮助你克服了在 macOS 机器上安装 Hadoop 的障碍!
请在 LinkedIn 上联系我!
如何在有 GPU 支持的 Ubuntu 18.04 LTS 上安装 tensor flow 2.1:Nvidia 驱动,CUDA 10,cuDNN
为深度学习系列提升您的 PC——第 4 部分
介绍
在本系列的第 1 部分中,我讨论了如何升级你的电脑硬件来整合 CUDA Toolkit 兼容图形处理卡,我安装了一个 Nvidia GTX 1060 6GB。本系列的第 2 部分讲述了在 Windows 10 上安装 CUDA、cuDNN 和 Tensorflow。在第 3 部分中,我从我的电脑上删除了 Windows 10,并从一张可启动的 DVD 上安装了 Ubuntu 18.04 LTS。
在本系列的第 4 部分,我正在为 Nvidia GPU 安装驱动程序,这些驱动程序与我希望安装在 Ubuntu 18.04 上的 CUDA Toolkit、cuDNN 和 Tensorflow 版本兼容,即 tensor flow 2.1——这需要 CUDA 10.1 或更高版本。在这样做的时候,在我的情况下,这也涉及到处理我的当前安装的 Nvidia 驱动程序、CUDA、cuDNN 和 Tensorflow(细节在步骤 1 中列出)。
步骤 1:检查要安装的驱动程序和软件版本是否与 Tensorflow 2.1 兼容
您选择的 Tensorflow 版本将决定 CUDA、cuDNN、编译器、工具链的兼容版本以及要安装的 Nvidia 驱动程序版本。因此,在安装 Nvidia 驱动程序、CUDA、cuDNN 以及 Tensorflow 2.1 之前,我会"先想好最终目标",首先检查与我的 Tensorflow 目标版本兼容的正确软件版本。
根据 Tensorflow 网站和 CUDA 安装指南:
- NVIDIA GPU 驱动程序— CUDA 10.1 要求 418.x 或更高版本。
- CUDA 工具包 — TensorFlow 支持 CUDA 10.1 (TensorFlow > = 2.1.0)。Tensorflow 1.13 及以上需要 CUDA 10。我希望能够在 1.13-2.1 之间安装各种版本的 Tensorflow(带 GPU 支持),因此 CUDA 10.1 是绝对需要的
- CUPTI (附带 CUDA 工具包)
- g++编译器和工具链
- cuDNN SDK ( > = 7.6)
- (可选) TensorRT 6.0 提高某些模型上推理的延迟和吞吐量。
当我之前在这台 Ubuntu 18.04 机器上安装 Tensorflow 时,只有 Tensorflow 1.12/CUDA 9 可用,CUDA 10 还不兼容 Tensorflow。因此,在完成下面的新步骤之前,我已经在该计算机上安装了以下内容:
- Tensorflow 版本 1.12
- CUDA 工具包版本 9.0
- 7.2 版 cuDNN,Tensorflow 版需要
- gcc 和 g++编译器和工具链
- NVIDIA GPU 驱动程序 390.132 (CUDA 9.0 需要 384.x 或更高版本)
步骤 2:CUDA 安装前:检查现有安装
在开始 CUDA 下载和安装之前,请在 Nvidia CUDA 网站上进行建议的检查此处:
- 验证系统是否具有支持 CUDA 的 GPU
- 验证系统运行的是支持的 Linux 版本。
- 验证系统是否安装了 gcc。
- 验证系统是否安装了正确的内核头文件和开发包。
步骤 2.1:检查系统是否有支持 CUDA 的 GPU
在 Ubuntu 终端中运行以下命令来检查您的图形卡(GPU):
lspci | grep -i nvidia
图 2.1:检查安装的图形卡(GPU)版本
如果您的显卡来自 NVIDIA,并且在此处列出,则您的 GPU 支持 CUDA。
步骤 2.2:检查您即将安装的 CUDA 是否支持您的 linux 版本
使用以下命令检查您的系统版本:
uname -m && cat /etc/*release
图 2.2:使用终端检查系统版本
当您获得与您系统版本相关的结果时,您可以查看 CUDA 在线文档以确保该版本受支持。
步骤 2.3:检查 gcc 安装
gcc --version
图 2.3:检查 gcc 安装(CUDA 所需)
步骤 2.4:检查 Ubuntu 系统是否有正确的内核头文件,开发包是否已安装
您的系统正在运行的内核版本可以通过运行以下命令找到:
uname -r
图 2.4:检查系统的内核头
对于 Ubuntu,当前运行的内核的内核头文件和开发包可以安装在:
# my current kernel header is 4.15.0-99-generic, yours may differ
uname_r =”4.15.0-99-generic”
sudo apt-get install linux-headers-${uname_r}
图 2.5:为当前运行的内核安装内核头文件和开发包
步骤 2.5:检查任何当前的 Nvidia 驱动程序
您还可以通过运行“nvidia-smi”命令来检查您当前使用的 Nvidia GPU 驱动程序(如果有),您可以看到,最初,我使用的是 Nvidia 驱动程序 390.132:
图 2.6:开始升级前运行命令检查当前 GPU 驱动程序
步骤 3:下载 NVIDIA 软件包仓库
接下来,下载 Nvidia 软件包库。这些命令基于来自 Tensorflow 网站的添加 Nvidia 包存储库的指令。从下载 CUDA 10.1 开始。deb 文件,方法是在 Ubuntu 18.04 机器上的 bash 终端中键入以下内容:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
图 3.1:下载 CUDA 10.1。deb 文件
接下来,拿钥匙:
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
图 3.2:从 Nvidia 网站获取密钥
然后安装 CUDA 10.1。64 位 Ubuntu 18.04 的 deb 文件:
sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
图 3.3:安装 CUDA 10.1 deb 文件
运行更新软件包命令下载各种软件包的更新版本:
sudo apt-get update
图 3.4:更新软件包命令以获得最新版本
获取更多适用于 CUDA 10.1 的 Nvidia 软件包库(根据 Tensorflow 网站上的命令):
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
图 3.5:获取更多的 Nvidia 软件包库
一旦下载了 Nvidia 软件包库,安装 Nvidia。带权限的 deb 包(sudo):
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
图 3.6:安装。带权限的 deb 包
并再次更新软件包:
sudo apt-get update
图 3.7:再次更新软件包
步骤 4:安装 NVIDIA 驱动程序版本 430
我已经安装了 NVIDIA 驱动程序版本 390;安装 nvidia 驱动程序版本 430。
sudo apt-get install --no-install-recommends nvidia-driver-430
图 4.1:首次尝试安装 nvidia 驱动程序 430
我得到消息说我的系统有未满足的依赖项,因此我通过使用以下命令删除 PPA 来解决这个问题(注意:-r 表示删除):
sudo apt-add-repository -r ppa:graphics-drivers/ppa
图 4.2:删除 PPA 的命令
确保包列表是最新的:
sudo apt update
删除所有现有的 nvidia 驱动程序:
sudo apt-get remove --purge '^nvidia-.*'
图 4.3:删除现有的 nvidia 驱动程序
然后尝试重新安装 Nvidia 驱动程序版本 430:
sudo apt-get install --no-install-recommends nvidia-driver-430
全新的 Nvidia 版本 430 驱动程序安装给出了下面的输出,并成功完成。
图 4.4:NVIDIA 驱动程序版本 430 的全新安装
一旦你安装了 nvidia 驱动 430,关闭并重启你的电脑。
步骤 5:检查新的 Nvidia GPU 驱动程序安装
在 bash 终端中使用以下命令检查新的 GPU 驱动程序是否可见:
nvidia-smi
该命令的输出如下所示,将确认新的 Nvidia 驱动程序版本是 430.50。请注意,CUDA 版本现在是 10.1(如上所述):
图 5.1:检查 Nvidia 驱动程序 430.50 是否已成功安装
步骤 6:安装 CUDA 10.1 和 CuDNN 开发和运行时库
为了安装 CUDA 和 cuDNN 开发和运行时库,Tensorflow 安装页面建议使用以下命令:
第一,安装 CUDA 10.1 运行时,下载、解压缩和安装大约需要 20-30 分钟:
# Install development and runtime libraries (~4GB)
sudo apt-get install --no-install-recommends cuda-10-1
图 6.1:安装 CUDA 10.1(显示终端输出的第一部分)
请注意,在终端打印输出中,有一个“重新启动计算机并验证 NVIDIA 图形驱动程序是否可以加载”的指令(图 6.2)。
图 6.2:重新启动计算机并验证 NVIDIA 图形驱动程序的说明
安装信息如下所示(图 6.3)
图 6.3:完成 CUDA 10.1 的安装
第 7 步:重新启动计算机(按照上述说明)并检查驱动程序版本
重启计算机(按照图 6.2 中的说明)。重新启动后,运行以下命令再次检查驱动程序的安装:
nvidia-smi
图 7.1:安装/更新驱动程序后检查已安装的 Nvidia 驱动程序
请注意,重启后,NVIDIA 驱动程序(意外地)升级到版本 440.64.00,CUDA 版本从版本 10.1 升级到版本 10.2,,如图 7.1 所示。因此,我为 CUDA 10.2 选择了合适的 cuDNN 用于下面的说明。
步骤 8:为 Ubuntu 18.04 下载 CuDNN
你可以从这里下载 cuDNN。以下是我下载 cuDNN 文件的步骤。
图 8.1:可以下载 cuDNN 的 Nvidia 网站截图
您必须注册才能下载 cuDNN(免费),登录截图如图 8.2 所示:
图 8.2:截图来自 Nvidia 网站:下载 cuDNN 必须登录
登录后,您将进入 cuDNN 下载页面:
图 8.3:登录 Nvidia cuDNN 网站时可用的 cuDNN 下载选项
要获得 v.7.6.4 或任何其他稍旧的 cuDNN 版本,请单击图 8.3 所示的“存档的 cuDNN 版本”。由于我的机器上似乎安装了 CUDA 10.2(而不是 CUDA 10.1),所以我为 CUDA 10.2 选择了合适的 cuDNN 库。这是 cuDNN 版本 7.6.5:
图 8.4:Nvidia cud nn 网站截图——下载 cuDNN 7.6.5 时不同操作系统的选项
从图 8.4 中,从列表中选择以下三项:
- Ubuntu 18.04 的 cuDNN 运行时库(Deb)
- 适用于 Ubuntu 18.04 的 cuDNN 开发人员库(Deb)
- 适用于 Ubuntu 18.04 (Deb)的 cuDNN 代码示例和用户指南—可选
这给出了以下内容。要下载的 deb 包:
图 8.5:Ubuntu 的 cuDNN 运行时库。deb 包
图 8.6:Ubuntu 18.04 的 cuDNN 开发者库。deb 下载
图 8.7:Ubuntu 18.04 的 cuDNN 代码样本和用户指南。deb 下载
步骤 9:为 Ubuntu 18.04 安装 CuDNN
为了安装 cuDNN,说明可从 tensorflow 网站获得一些说明,更详细的 cuDNN 库命令见 cuDNN 安装指南。下面是一个截图:
图 9.1:Nvidia 网站上 cuDNN 安装指南的截图
# change directory to where the cuDNN runtime library is downloaded
cd ~/Downloads# Install cuDNN runtime library
sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb# Install cuDNN developer library
sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb# (optional) install code samples and the cuDNN library documentation
sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb
图 9.2:安装 cuDNN 运行时库
图 9.3:安装 cuDNN 开发人员库
图 9.4:安装代码示例和 cuDNN 库文档
步骤 10:测试 cuDNN 安装
在第 9 步下载了与 cuDNN 相关的内容之后,第 10 步将测试新的 cuDNN 安装。测试 cuDNN 安装的命令包含在 cuDNN 安装指南中:
图 10.1:验证 cuDNN 安装的步骤截图,在这里找到了
应用 cuDNN 安装指南中的,通过编译位于/usr/scr/cudnn_samples_v7 中的 mnistCUDNN 示例(由 Debian 安装)来验证 cuDNN 是否已正确安装和运行。deb)文件。
当您安装了。deb 文件,您可以通过转到/usr/src 文件夹找到下面的示例,在那里您可以看到“cudnn_samples_v7”(图 10.1):
图 10.2:将目录更改为“/usr/src/”,其中可以找到 cudnn_samples_v7
然后将 cudnn_samples_v7 文件夹复制到 home,如图 10.1 所示:
图 10.3:将 cuDNN v7 示例从那里复制到主文件夹
将 samples 文件夹复制到主文件夹(您可以在那里运行它们)后,将目录切换到 mnistCUDNN 文件夹,并运行以下代码来编译 mnistCUDNN 示例:
make clean && make
该命令的输出如图 9.8 所示:
图 10.4:编译 mnistCUDNN 示例后的输出
然后使用以下命令在 mnishCUDNN 文件夹中运行 mnistCUDNN 示例:
./mnistCUDNN
图 10.5:运行 mnistCUDNN 示例后的输出——“测试通过!”
当您运行 mnistCUDNN 示例时,成功的运行应该以“Test passed!”连同分类结果,如图 10.4 所示。
步骤 11:下载 Tensorflow RT
作为软件需求的一部分列出的最后一个包是 可选的 Tensorflow RT,可以下载并安装该包,“以提高某些模型上推理的延迟和吞吐量”。
Tensorflow RT 的安装说明在 Tensorflow 自己的网站这里有概述,但是关于不同操作系统的 tensorflow RT 安装的更详细的说明和更清晰的信息,包括我正在使用的 Linux Debian,可以在这里找到。
图 11.1:从深度学习 sdk 文档安装 TensorRT 的说明
点击图 11.1 中的“下载”将带您进入图 11.2 所示的屏幕截图页面(注意,您必须免费注册 cuDNN,并使用您在上面 cuDNN 中使用的 Nvidia 开发人员凭据再次登录,以便下载 TensorRT):
图 11.2:登录并下载 TensorRT
这将带您进入下一页(图 11.3),其中显示了可用的 TensorRT 版本。按照步骤 1 中 Tensorflow 的建议,我选择下载 TensorRT 6。
图 11.3:选择要下载的 tensort 版本(我选择了 TensorRT 6)
选择 TensorRT 6.0 后,这提供了更多下载选择,如图 11.4 所示:
图 11.4:各种 Ubuntu 和 CUDA 版本的 TensorRT 选择
我将为 Ubuntu 1804 和 CUDA 10.2 选择 TensorRT 6.0.1.8 GA。deb 本地回购包(在上面的步骤中,我的系统从 10.1 升级到了 CUDA 10.2)。
图 11.5:为 Ubuntu 1804 和 CUDA 10.2 下载坦索特 6.0.1.8 GA。债券本地回购包
您可以检查已安装的 CUDA 版本,如下所示:
图 11.6:检查已安装的 CUDA 版本
图 11.6 显示我有 CUDA 9.0,CUDA 10.1,CUDA 10.2 (CUDA 10.2 是最后安装的)。基于这篇名为 MultiCUDA : 一机多版本 CUDA的优秀文章,多个版本的 CUDA 可以并存。它说“安装多个版本不会导致任何以前的版本被覆盖,所以没有必要担心。您安装的每个版本都将覆盖导致操作系统使用某个版本的配置,但是默认情况下,它们都按照版本号安装在/usr/local 下的单独目录中。
因此,我保留了 CUDA 的所有三个版本——首先将使用 CUDA 10.2。
步骤 12:安装 Tensorflow RT
安装 Tensorflow RT 的注意事项在 Nvidia 网站这里。
图 12.1:为 Debian 安装 TensorRT 指令(。deb 文件)——在这里找到了
我正在安装。Tensorflow RT 的 deb 版本,如上图 12.1 所示,自动安装依赖项。安装 Tensorflow RT 的版本独立说明如下:
os=”ubuntu1x04”
tag=”cudax.x-trt7.x.x.x-ea-yyyymmdd”
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${tag}/7fa2af80.pub
sudo apt-get update
sudo apt-get install tensorrt
的。我下载的 TensorRT 的 deb 文件是“NV-tensor rt-repo-Ubuntu 1804-cuda 10.2-TRT 6 . 0 . 1 . 8-ga-2019 11 08 _ 1–1 _ amd64 . deb”,我已经下载到“下载”中。
对于我的操作系统和 CUDA“标签”,这些安装说明变成:
# change directory to where you have downloaded the .deb file
# (in my case, downloads)
cd ~/Downloads# specific instructions for nv-tensorrt-repo-ubuntu1804-cuda10.2-trt6.0.1.8-ga-20191108_1–1_amd64.deb os=”ubuntu1804”
tag=”cuda10.2-trt6.0.1.8-ga-20191108”
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.debsudo apt-key add /var/nv-tensorrt-repo-${tag}/7fa2af80.pub
转到下载文件夹并安装 TensorflowRT。deb 文件显示在图 12.2 的终端中。
图 12.2:运行 TensorRT 包
图 12.3:为 TensorRT 安装添加密钥
添加 TensorRT 安装的密钥后,最后,更新软件包,并安装 Tensor RT。这将需要几分钟时间。在 tensor RT 安装过程中,系统会提示您输入“y/n”答案,您可以通过在安装命令中添加一个“-y”标志来预先设置。
sudo apt-get update#install tensor rt - optionally add a '-y' flag at the end of the command below to pre-empt the prompt sudo apt-get install tensorrt -y
图 12.4:安装 TensorRT
根据此处的指令,使用以下命令:
sudo apt-get install python3-libnvinfer-dev
图 12.5:安装 python3-libnvinfer-dev 包(TensorRT 的一部分)
如果您计划将 TensorRT 与 TensorFlow 一起使用,请运行以下命令:
sudo apt-get install uff-converter-tf
图 12.6:运行命令以使用 Tensorflow 启用 TensorRT
使用以下命令验证 TensorRT 安装
dpkg -l | grep TensorRT
图 12.7:检查 TensorRT 安装
步骤 13:安装 Tensorflow(推荐:在虚拟环境中安装)
到目前为止,我执行的每一个安装步骤(如上所述)都是系统范围的安装。您 可以 在类似的系统范围基础上安装 Tensorflow,但更可取的是 将其安装在虚拟环境 中,这样它会在无意中安装/卸载(或通常干扰)其他包时停止您的 Tensorflow 安装。
这一步使用命令行和 Pycharm IDE 在新的虚拟环境中进行安装,但是您可以使用自己喜欢的方法创建一个虚拟环境。在虚拟环境中安装 Tensorflow 2 的命令是这里是。从 Tensorflow 版本[X]开始,CPU 和 GPU 支持的版本没有单独的安装命令。
步骤 13.1:用虚拟环境建立一个新的 Pycharm 项目
我在 Pycharm 中创建了一个说明性的项目来展示虚拟环境的最初创建。Pycharm 的版本是社区版 2020.1.1。
首先在 Pycharm 中创建一个新的(演示)项目,使用 File -> New Project,如图 13.1 所示
图 13.1:在 Pycharm 中创建新项目
这将产生一个在虚拟环境中创建项目的窗口,如图 13.2 所示
图 13.2:使用 Pycharm 在虚拟环境中创建新项目
图 13.2 中的窗口给出了命名新项目的选项。如果您单击“项目解释器”左侧的箭头,它会提供如图 13.3 所示的选项。
图 13.3:在 pycharm 中设置新的环境设置
在位置框中将项目命名为“example_tf_2”会对窗口进行更改,如图 13.4 所示
图 13.4:创建一个名为 example _ TF _ 2(tensor flow 2 的缩写)的新项目
当您单击“创建”来创建新项目时,会出现图 13.5 所示的窗口:
图 13.5:显示新项目的选项
我选择“attach ”,将这个新项目添加到我已经打开的 Pycharm 中其他项目的下拉列表中。这将创建一个名为“example_tf_2”的新项目文件夹;请注意,它有一个“venv”文件夹。
图 13.6:py charm 中的新项目结构,包括 venv 文件夹
在 Pycharm 查看器(终端)的底部窗口中,将目录更改为相关目录(在本例中,新的项目目录是“example_tf_2”)。)
图 pycharm 中的终端显示了到新 example_tf_2 项目的路径
在命令行中使用以下命令激活新的虚拟环境(称为“venv”):
source venv/bin/activate
如果你把你的虚拟环境叫做别的东西,比如‘myvenv’,那么相应的命令将改为:
source myvenv/bin/activate
当您运行激活命令时,命令行开始显示“(venv)”,这意味着虚拟环境已经被激活。
图 13.8:在 Pycharm 上激活终端内的虚拟环境
步骤 13.2:在虚拟环境中安装 Tensorflow 2
要在此虚拟环境中安装 Tensorflow,请在命令行窗口中运行以下 pip 命令(在 Pycharm 或您自己的终端中):
# choosing 'tensorflow' without specifying the version installs the # latest stable version of tensorflow (here, version 2.1.0)
# the command prompt should read something like:
# (venv) /your/particular/path$
# installs latest stable version of tensorflow, with GPU or CPU supportpip install tensorflow
图 13.9:使用 Pycharm 中的终端在新的虚拟环境中安装 Tensorflow 2.1
在虚拟环境中完成 Tensorflow 2.1.0 的安装后,终端将返回到命令提示符“$”:
图 13.10:在虚拟环境中安装 Tensorflow 2.1 后,终端返回到命令提示符$处
步骤 14:检查 Tensorflow 和 GPU 支持的安装是否正确
要测试您的 Tensorflow 安装对 CUDA 的支持,以及 Tensorflow 是否找到了您的 GPU 设备,首先在命令行中键入“python”从终端调用 Python:
python
通过在虚拟环境的命令行中键入“python”来调用由“> > >”表示的 python 命令提示符
命令提示符应该从“$”更改为“> >”。然后导入 Tensorflow,之后您可以在 shell 中运行构建测试:
# import tensorflow package
import tensorflow as tf# test that tensorflow has been built with cuda
tf.test.is_built_with_cuda()
这将返回输出“True”。
为了检查 Tensorflow 找到的 GPU,您可以使用以下命令列出这些 GPU:
tf.config.list_physical_devices(‘GPU’)
Tensorflow 应该输出类似上面示例的内容—名称和设备类型。
最后,您可以使用 Tensorflow 网站上显示的命令来验证安装(从标准命令提示符“$”)。注意:如果您有 python 命令提示符(“> > >”),并且希望返回到标准 shell 命令提示符(" $ "),请按 CTRL+ Z。
以下命令导入 Tensorflow 并执行计算,例如:
python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
这将输出关于您的 GPU 和已安装的软件包的信息,以及测试函数的输出。
关于 Keras 和张量流的结论和注记
本文列出了我用来安装新的 Nvidia 驱动程序 CUDA、cuDNN 和 TensorRT(可选)的过程,所有这些都是在我的 Ubuntu 18.04 机器上使用 Tensorflow 2 和 GPU 支持的前兆。
以前我一直使用独立 Keras 和 Tensorflow 后端。现在有了 Tensorflow 2.0 及以上版本,keras 被包含在“tf.keras”形式中,所以不再需要单独安装 Keras(虽然我假设你仍然可以)。
Tensorflow Keras (tf.keras)似乎有许多与独立 Keras 相同的功能,tf.keras 的指南可以在这里找到。
该指南声明[tf.keras](https://www.tensorflow.org/api_docs/python/tf/keras)
可以运行任何 Keras 兼容的代码,但是请注意:
- 最新 TensorFlow 版本中的
[tf.keras](https://www.tensorflow.org/api_docs/python/tf/keras)
版本可能与 PyPI 的最新keras
版本不同。检查[tf.keras.**version**](https://www.tensorflow.org/api_docs/python/tf/keras#__version__)
。 - 当保存模型的权重时,
[tf.keras](https://www.tensorflow.org/api_docs/python/tf/keras)
默认为检查点格式。传递save_format='h5'
以使用 HDF5(或者传递一个以.h5
结尾的文件名)。
这篇文章也发表在https://schoolforengineering.com上,可以在这里找到。
安装 TensorFlow
这并不像你可能听说的那样困难
朋友不让朋友从源头建 TF。来源
我看到越来越多的文章认为安装 TensorFlow 很困难。从源代码构建 TensorFlow 肯定不适合胆小的人,但是安装 TensorFlow 用于您的下一个 GPU 加速的数据科学项目可以在一行中完成(如果您使用正确的工具)。
一条线的解决方案
使用 Conda (+pip),您可以在一行中安装支持 GPU 的最新版本 TensorFlow。
conda create --name tensorflow-22 \
tensorflow-gpu=2.2 \
cudatoolkit=10.1 \
cudnn=7.6 \
python=3.8 \
pip=20.0
如果你以前从未使用过 Conda (+pip),我推荐你看看《Conda 入门》。
我的首选解决方案
如果您只想快速启动并运行 TensorFlow 2.2 的一些新功能,上面的一行解决方案非常有用,如果您正在使用 TensorFlow 2.2 启动一个新项目,那么我建议您为您的项目创建一个environment.yml
文件,然后将 Conda 环境作为子目录安装在项目目录中。
在项目目录中创建一个 environment.yml 文件
name: nullchannels:
- conda-forge
- defaultsdependencies:
- cudatoolkit=10.1
- cudnn=7.6
- nccl=2.4
- pip=20.0
- python=3.8
- tensorflow-gpu=2.2
在您的项目目录中安装 Conda 环境
conda env create --prefix ./env --file environment.yml --force
要了解更多 Conda“最佳实践”,我建议查看使用 Conda 管理您的数据科学项目环境的 。
使用 Conda (+pip)的好处
使用 Conda (+pip)安装 TensorFlow 有很多好处。最重要的是,不需要手动安装英伟达 CUDA 工具包,cuDNN,或英伟达集体通信库(NCCL)。将 TensorFlow 安装到虚拟 Conda 环境中,而不是在系统范围内安装,可以避免接触系统 Python,并允许您在机器上安装多个版本的 TensorFlow(如果需要)。最后,如果你选择使用我的首选方法,你也将拥有一个environment.yml
,你的同事和同行可以使用它在他们的机器上重建你的 Conda 环境,或者你可以使用它在公共云上重建你的 Conda 环境,比如 AWS、GCP、微软 Azure。
在 Ubuntu 20.04 中安装 TensorFlow GPU
安装 TensorFlow GPU 及其必备包的简短指南
同时发布在https://afagarap . works/2020/07/26/installing-TF-GPU-Ubuntu 2004 . html
当 Ubuntu 发布长期支持(LTS)版本时,我通常会等待一段时间再升级,主要是因为我在等待 CUDA 和 cuDNN 对新版本的支持。这一次,我只用了三个月就从 Ubuntu 18.04 迁移到了 Ubuntu 20.04——嗯,技术上来说是基于 Ubuntu 的发行版,也就是 Regolith Linux 。我这样做的决定只是因为我将我的 SSD 从 120GB 升级到 1TB,所以我也迁移到了一个不同的操作系统——尽管只是一个 Ubuntu 的衍生物。
照片来自 Pixabay 的 geordie_strike 。
正如我预料的那样,我花了一段时间来适应我的新系统。幸运的是,我在网上看到了一些有用的答案,现在我在他们的答案上增加了一些解释。所以,这个帖子实际上是基于 meetnick 和 singrium 在这个相关问题中给出的答案。
Ubuntu 20.04 中 TensorFlow GPU 的安装可以总结为以下几点,
- 通过安装
nvidia-cuda-toolkit
来安装 CUDA 10.1。 - 安装与 CUDA 10.1 兼容的 cuDNN 版本。
- 导出 CUDA 环境变量。
- 安装带 GPU 支持的 TensorFlow 2.0。
安装 CUDA 10.1
首先,通过转到“附加驱动程序”,确保您使用的是 NVIDIA 专有驱动程序,然后选择合适的驱动程序,即对于 CUDA 10.1,所需的驱动程序版本是≥ 418.39 。我们使用专有版本而不是开源版本,因为 CUDA 只能使用专有驱动。
我们正在安装 CUDA 10.1,因为它是与 TensorFlow GPU 兼容的版本。
图片由作者提供。为 CUDA 10.1 选择合适的专有驱动程序版本,即≥ 418.39。
在撰写本文时,还没有适用于 Ubuntu 20.04 的 CUDA 10.1,但正如 meetnick 在引用的 Ask Ubuntu 帖子中指出的那样,安装nvidia-cuda-toolkit
也会安装 CUDA 10.1。
图片由作者提供。 CUDA 工具包存档。
为了啰嗦起见,Ubuntu 20.04 不要尝试使用 18.10 或 18.04 CUDA 10.1。我是吃了苦头才知道的,哈哈!
所以,你可以在 Ubuntu 20.04 中安装 CUDA 10.1,
$ sudo apt install nvidia-cuda-toolkit
安装 CUDA 10.1 后,运行nvcc -V
。然后,您将得到与下面类似的输出,以验证您是否成功安装,
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
与 Ubuntu 18.04(我来自的地方)不同,CUDA 在 20.04 中安装在不同的路径中,即/usr/lib/cuda
——你可以通过运行,
$ whereis cuda
cuda: /usr/lib/cuda /usr/include/cuda.h
在 Ubuntu 18.04 中,你可能知道,CUDA 安装在/usr/local/cuda
或者/usr/local/cuda-10.1
中。
安装 cuDNN
安装 CUDA 10.1 后,现在可以从这个链接下载安装 cuDNN 7.6.5。然后,选择“下载 cuDNN”,你会被要求登录或创建一个 NVIDIA 帐户。登录并接受 cuDNN 软件许可协议的条款后,您将看到可用 cuDNN 软件的列表。
点击“CUDA 10.1 下载 cud nn v 7 . 6 . 5(2019 . 11 . 5)”,然后选择“cuDNN Library for Linux”下载 cuDNN 7.6.5 for CUDA 10.1。下载 cuDNN 后,通过运行,
$ tar -xvzf cudnn-10.1-linux-x64-v7.6.5.32.tgz
接下来,将提取的文件复制到 CUDA 安装文件夹中,
$ sudo cp cuda/include/cudnn.h /usr/lib/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
设置 cuDNN 的文件权限,
$ sudo chmod a+r /usr/lib/cuda/include/cudnn.h /usr/lib/cuda/lib64/libcudnn*
导出 CUDA 环境变量
TensorFlow 需要 CUDA 环境变量来支持 GPU。要设置它们,我们需要通过运行,
$ echo 'export LD_LIBRARY_PATH=/usr/lib/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/lib/cuda/include:$LD_LIBRARY_PATH' >> ~/.bashrc
通过运行以下命令加载导出的环境变量:
$ source ~/.bashrc
安装 TensorFlow 2.0
安装好必备包后,最后就可以安装 TensorFlow 2.0 了,
$ pip install tensorflow==2.2.0
默认情况下,tensorflow
包现在包含了 GPU 支持,而过去我们需要专门安装tensorflow-gpu
。
通过运行以下命令验证 TensorFlow 可以检测到您的 GPU,
>>> import tensorflow as tf
>>> tf.config.list_physical_devices("GPU")
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
如果事情进展顺利,应该会有类似的输出。
您现在可以享受使用 TensorFlow 进行深度学习项目了!万岁!
如果你正在寻找一个 TensorFlow 项目,也许你会发现我的博客在 TensorFlow 2.0 中实现自动编码器很有趣!
另外,如果你喜欢这篇文章,也许你也会喜欢我的其他博客!
关于信任分数的直觉和指南
medium.com](https://medium.com/@afagarap/how-can-i-trust-you-fb433a06256c) [## 使用梯度噪声添加避免消失梯度问题
添加梯度噪声改善了深度神经网络的学习。
towardsdatascience.com](/avoiding-the-vanishing-gradients-problem-96183fd03343) [## 在 PyTorch 中实现自动编码器
构建用于重建的自动编码器模型
medium.com](https://medium.com/pytorch/implementing-an-autoencoder-in-pytorch-19baa22647d1)
实例硬度阈值:一种解决不平衡分类问题的欠采样方法
从多数类中移除“困难”样本
卡洛斯·埃斯特韦斯在 Unsplash 上拍摄的照片|钻石是坚硬的——样品也可能是坚硬的
如果你认真看过吴恩达在 Coursera 上的深度学习课程,你可能就知道错误分析需要什么了。Andrew 提倡在确定需要改进的地方并相应地修改系统之前,快速构建第一个工作系统。找出分类系统改进领域的一种方法是通过对错误分类样本的研究。对于 Andrew 作为例子使用的猫图像分类器,大型猫的图像可能经常被错误分类。在这方面,大猫样本是硬的。
对于机器学习从业者来说,*‘硬’*这个术语太模糊,无法描述单个样本(即实例)。迈克尔·史密斯、托尼·马丁内斯和克里斯托夫·吉罗德·卡里尔肯定也遇到了这个问题,他们写了一篇名为 数据复杂性的实例级分析 *的研究文章。*在这篇文章中,他们基于一组选定的学习算法的分类行为,提出了实例难度的经验定义。
为什么要有一套学习算法?作者解释说,样本的错误分类取决于所使用的学习算法以及样本与其对应样本之间的关系。实例硬度的概念是相对的;将在同一实例上应用一组不同且实用的学习算法的结果聚集在一起具有泛化效果。
实例硬度的定义(IH)
史密斯、马丁内兹和吉罗-卡里尔在他们的文章中对 IH 给出了严格的表述。强烈鼓励那些不回避数学符号的人看一看它。
粗略地说,作者事先选择了一组选定的 n 学习算法,并在训练集上逐一应用它们。这样, n 个量词就产生了。对于单个实例(即样本),可以使用指示函数和分类器分数来估计分类器 i 向其分配正确标签的概率pi(I 的范围从 1 到 n) 。取 n 个估计量的 P_i 的平均值,我们得到了正确分类这种情况的可能性。IH,错误分类实例的可能性,因此将是 1 减去这个平均值。
为什么硬实例很难分类
在论文中,作者还继续研究了为什么硬实例很难分类。他们对 19 万个样本的实验结果显示,类别重叠对 IH 的影响最大。
下图举例说明了类别重叠的含义:
左:没有类重叠问题;右图:出现班级重叠(这两张图片是我自己的)
当样本空间中的一个区域包含来自另一个类别的样本时,就会发生类别重叠。重叠样品具有高的实例硬度。当数据集中同时出现类别不平衡和类别重叠时,分类问题变得更加困难。
一举两得——IHT
实例硬度阈值(IHT)是一种欠采样方法,用于通过移除硬样本来缓解类别不平衡。在此基础上,本文提出了一个非均衡学习图书馆 IHT 的实现方案。**分类概率低的样本将从数据集中删除。**之后,将在欠采样数据的基础上建立模型。
让我们检查一下 imblearn.under_sampling 的关键参数。InstanceHardnessThreshold:
- 估计器:估计样本 IH 的学习算法。只需要一个估计器,默认算法是随机森林。
- sampling_strategy :用户并没有真正指定实例硬度的阈值。相反,这里的采样策略更注重结果。当提供浮点数时,它将是 IHT 算法输出的少数类样本与多数类样本的比率。如果提供了一个字符串,相应的类将成为欠采样的目标。用户甚至可以输入一个字典来指定每个类输出的样本数。
- cv :评估样品实例硬度时使用的交叉验证折叠数。
在现实生活中的一个问题上尝试 IHT:欺诈检测
类似于我之前关于处理不平衡数据集的文章,我将使用来自 kaggle 的信用卡交易数据集来演示使用 IHT 的代码。数据集极度不平衡;在 284,807 笔交易中,只有 492 笔欺诈。80%的事务将从决策树分类器(max_depth=5)中学习,20%的事务将形成测试集。
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(max_depth=5,random_state=42)
dt.fit(X_train, y_train)
决策树应用于测试集时的分类结果
接下来,我们使用分类器 dt 作为估计器来估计样本的 IH。对于使用 IHT 方法进行欠采样,直到多数类与少数类的比率为 0.0019,并计算该变换前后训练集的形状:
from imblearn.under_sampling import InstanceHardnessThreshold
from collections import Counterprint('Original test dataset shape %s' % Counter(y_train))
iht = InstanceHardnessThreshold(estimator=dt, sampling_strategy='majority', random_state=42)
X_train_res, y_train_res = iht.fit_resample(X_train, y_train)
print('Resampled dataset shape %s' % Counter(y_train_res))
类别分布
如上面的输出所示,从多数类中移除了 2328 个样本。少数类样本保持不变。
接下来,将 max_depth 为 5 的决策树拟合到重新采样的数据集:
dt_new = DecisionTreeClassifier(max_depth=5,random_state=42)
dt_new.fit(X_train_res, y_train_res)
分类结果是:
当新的决策树分类器被应用于测试数据集时
新的决策树分类器在分类少数类样本方面具有与旧的相似的能力。然而,更多的正常交易被归类为欺诈,这导致精确度下降。由 IHT 去除的样本可能携带有帮助分类器识别正常交易更好者的信息。
虽然 IHT 对于这个特殊的问题不是很有效,但是希望通过代码片段,那些不熟悉这种欠采样方法的人可以很容易地掌握它。
结论
实例硬度阈值(IHT)是一种相当特殊的欠采样方法,其方法是移除与少数类样本空间重叠的多数类样本。这篇文章介绍了 IHT 的基础知识,并展示了如何实现它来解决不平衡的类问题。
谢谢你读了这个故事!
参考文献
- 数据复杂性的实例级分析。马赫学 **95,**225–256(2014)。https://doi.org/10.1007/s10994-013-5422-z
- 不平衡学习库中 InstanceHardnessThreshold 的文档:https://不平衡学习. readthedocs . io/en/stable/generated/imb learn . under _ sampling。instance hardness threshold . html # r 2 bfe 4 eaac 981-1
实例级识别
实例级识别的简介、挑战和最新获奖解决方案。
实例级识别,按作者分类的图像
在这篇博客中,我将介绍实例级识别、用例、挑战、当前可用的数据集,以及这些挑战/数据集的最新成果(最近的获奖解决方案)。
介绍
IinstanceLlevelRecognition(ILR),是一个视觉识别任务,用来识别一个对象的特定实例,而不仅仅是对象类。
例如,如上图所示,painting 是一个对象类,达芬奇的“蒙娜丽莎”是该绘画的一个实例。同样,印度的泰姬陵也是物体类建筑的一个实例。
用例
挑战
- **大规模:**识别任务的大多数当前技术水平的结果是在非常有限的类别上测量的,例如 ImageNet 中的大约 1000 个图像类别, COCO 中的大约 80 个类别。但像地标检索和识别这样的用例有 20 万多个类别,例如在谷歌地标数据集 V2 (GLDv2) 中,亚马逊上有 10 万多个产品类别。
- 长尾 : 很少热门的地方有超过 1000+的图片但是很多不太知名的地方在 GLDv2 中图片少于 5 张。
谷歌地标数据集 v2**【gld v2】**类别分布,图片来自https://arxiv.org/pdf/2004.01804.pdf
- **类内可变性:**地标大多分布在广阔的区域内,并且具有非常高的类内可变性,如下图所示。
图片来自谷歌地标数据集 v2 (GLDv2)
- **嘈杂的标签:**机器学习模型的成功依赖于高质量的带标签训练数据,因为标签错误的存在会大大降低模型的性能。这些噪声标签如下图所示,不幸的是,噪声标签是大型训练集的一部分,需要额外的学习步骤。
来自 AliProducts 的嘈杂标签。图片来自https://arxiv.org/pdf/2008.11586.pdf
数据集
- 谷歌地标数据集 V2 (GLDV2) : 谷歌地标数据集 v2 是人工和自然地标领域大规模、细粒度实例识别和图像检索的新基准。下图显示了地标数据集的所有细节
图片来自https://arxiv.org/pdf/2004.01804.pdf
- CVPR 2020 阿里产品挑战赛 : 阿里产品挑战赛是一个大规模、嘈杂、细粒度的产品数据集,包含约 50K 个类别,约 3M 张图片。该数据集是作为研究世界领先的电子商务公司遇到的商品图像识别问题的竞赛而提出的。本次比赛是零售视觉研讨会的一部分,零售视觉 CVPR 2020 研讨会在 CVPR 2020 举行。
图片来自https://retail vision workshop . github . io/recognition _ challenge _ 2020/
- 亚马逊产品挑战赛 : 亚马逊产品数据集在 ILR ECCVW 2020 workshop 公布,将于 2021 Q1 发布。由于产品目录图像是由专业人员拍摄的,而查询图像通常是由手机摄像头拍摄的,并且光照条件差,背景杂乱,因此数据集中的图像存在域不匹配。
图片来自https://drive . Google . com/file/d/1 sgsvnvxlhkehajdlmlqbwmwic 9 hll 0 dn/view
结果
下面我将讨论地标识别和产品识别的最新获奖解决方案。
谷歌地标识别
在地标识别挑战赛中,任务是从图像中预测地标标签,自 2018 年起每年都进行。下图显示了本次比赛的全球平均精度的进度。
作者图片
2020 年解决方案
建筑
一个集合了 7 个全局描述符的模型( SeResNext101 , EfficientNet-B3 , ResNet152 ,Res2Net101)。下图显示了 SeResNext101 主干的设置,对于其他主干,我们也遵循类似的架构。每个主干网络使用广义平均(GeM)池聚合,然后是线性颈(Linear neck)【512, BatchNorm1D , PReLU ,最后馈入弧形边缘头。
SEResNext101 backbone 的设置,图片来自https://www . ka ggle . com/c/landmark-recognition-2020/discussion/187821
ResNet 变体 (152 & 101)都依赖于识别跳过一层或多层的快捷连接来解决渐变消失的问题。SeResNeXt是 ResNeXt 的变种,是一个初始网的快捷连接, Se 是指 ResNeXt 中增加的挤压和激励模块。Se 网络通过自适应调整特征图的权重来改善信道相关性。 EfficientNet 是一种先进的图像分类网络,它依靠自动机器学习来找出最佳的基础网络和高效的复合缩放,以根据可用的计算资源来实现改进的结果。
颈网络中的广义均值池( GeM ) 计算张量中每个通道的广义均值。如果 p𝑘 → ∞,GeM 表现为最大池,p𝑘 → 1,表现为平均池。随着 p𝑘的增加,汇集的特征地图的对比度增加并聚焦于图像的显著特征。
广义平均池方程。图片来自https://arxiv.org/pdf/1711.02512.pdf
PReLU : PReLU 是 leaky ReLU 的推广,用于解决当数据没有归一化或网络权重没有正确初始化时出现的神经元死亡问题。
ReLU(左)和 PReLU(右)。对于 PReLU,自适应地学习负部分的系数。图片来自https://arxiv.org/pdf/1502.01852v1.pdf
Arc margin 对 softmax loss 进行了改进,通过在半径为 s 的超球面上分布学习嵌入,加强了类内变化的相似性和类间的多样性。下面是 MxNet 上 ArcFace loss 的伪代码。
图片来自 https://arxiv.org/pdf/1801.07698.pdf
培养
- 使用相册在不同的图像比例【448x448,568x568,600x600,512x512】下训练模型。
- 使用余弦退火调度程序对每个模型进行 10 个时期的训练。
- 2019 年比赛的测试集与标签一起发布,用作验证。
重新排名
作为后处理步骤,进行重新排序以惩罚非界标图像,从而改善间隙度量。
- 测试:排行榜测试集。
- 训练:确定标签和置信度候选图像。
- 非界标:来自 GLDv2 测试集的无界标图像。
重新排序步骤:
- 计算测试图像和训练图像之间的余弦相似度 (A)
- 计算训练和非标志图像之间的平均(前 5 或前 10)余弦相似性。 (B)
- 计算 Ai,j — Bj
- 对同一标签的置信度求和,选取最高的。
后处理重新排序。图片来自https://www . ka ggle . com/c/landmark-recognition-2020/discussion/187821
上述解决方案最重要的一点是使用 2019 年的竞赛测试集作为推理后处理重新排名的验证,并导致排行榜最高得分 0.6598 ,比 2019 年的结果好**~ 1.75 倍**。
CVPR 2020 阿里产品挑战赛
赢家方案
体系结构
骨干网( EfficientNet-B3 、 EfficientNet-B 4、 ResNet50 、 SeResNext50 、 SeResNext101 )用破坏与构造学习(DCL) 、查看对象(LIO) 方法进行微调。模型平均用于集成所有微调模型,实现 6.27% 的前 1 位错误率。
如下图所示的 DCL 通过洗牌局部区域来学习局部区别区域和特征,从而增强细粒度识别。为了防止网络学习有噪声的模式,提出了一个对抗性的对等体来拒绝区域混淆机制(RCM)引起的不相关的模式。更多详情请查看文件。
DCL 网络,图片来自https://trax-geometry . S3 . amazonaws . com/cvpr _ challenge/retail vision _ challenge talk 1 . MP4
LIO 如下图所示,模型结构采用自监督学习。对象范围学习帮助主干网络区分前景和背景。使用自我监督的空间上下文学习加强了主干网络的结构信息。更多细节请查看论文。
探究对象(LIO)框架。图片来自https://arxiv.org/pdf/2003.14142.pdf
预处理
所有图像的大小都调整为 256x256,然后随机裁剪为 224x224 用于训练,中间裁剪为 224x224 用于测试。使用以下工具扩充训练数据
培训
所有模型都由一个 SGD 优化器训练,该优化器具有手动学习率衰减功能。
- 所有经过基本培训的骨干网络都达到了**20–25%**的最高错误率。
- 所有的主干网络都通过平衡训练进行了微调,实现了**9–12%**的顶级错误率。如果一个类别中的图像数量少于 30,则平衡训练集也包括来自验证的所有图像。
- 在更高分辨率的图像(448x448)上使用 DCL 进一步微调所有主干,进一步将错误率降低1–2%。
- 如下图所示,使用精度损失对所有网络进行了进一步微调,针对前 1 位错误率进行了优化,将错误率降低了**~ 0.2–0.5%**。
def **acc_loss**(y_true, y_pred):
tp = (y_pred, y_true).sum(1)
fp = ((1-y_true)*y_pred).sum(1)
acc = tp/(tp+fp)
return 1 - acc.mean()
低于 11 个模型用于计算最终概率
- 平衡微调 resnet50、seresnext50、seresnext101、efficientnet-b3、efficientnet-b4
- DCL 微调 resnet50,seresnext50
- 精确损耗微调 resnet50、seresnext50、efficientnet-b3
- LIO 微调 resnet50
结论
实例级识别将揭示深度学习技术在电子商务、旅游、媒体和娱乐、农业等领域的语义图像分类/检索的真正潜力。高效的实例级解决方案的一些主要构件是
- 主干网络选择(剩余、挤压和激励、高效网络)
- 数据扩充(缓冲、自动扩充、剪切等)。
- 损失函数(ArcFace,AccuracyLoss)。
- 多尺度处理。
- 微调和后期处理。
感谢您阅读这篇文章,我希望这对您有所帮助。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。此外,如果有不清楚或不正确的地方,请在评论区告诉我。
参考
- https://ilr-workshop.github.io/ECCVW2020/
- https://ai . Google blog . com/2020/09/advancing-instance-level-recognition . html
- https://drive . Google . com/file/d/1 F9 vzw 1 gtx aohl _ ApA-qdzkaklab 5 cz 6t/view
- https://www . ka ggle . com/c/landmark-recognition-2020/discussion/187821
- https://trax-geometry . S3 . Amazon AWS . com/cvpr _ Challenge/recognition _ Challenge _ technical _ reports/1st _ _ Winner+Solution+for+AliProducts+Challenge+Large-scale+Product+recognition . pdf
实例分段 Web 应用程序
使用 Docker、Flask 和 Detectron2 构建用于实例分割的 Web 应用程序
Detectron2 提供最先进的实例分割模型。训练非常快,而且效果非常好。
模型训练相当简单。那里有很多教程可以帮你。将模型部署到 web 应用程序是另一回事。当我尝试这样做的时候,我没有在网上找到很多帮助。
因此,在这篇文章中,我们将为 detectron2 的实例分段创建一个 web 应用程序。
后端
首先,我们将创建机器学习后端。这将使用基本的烧瓶。我们将从一些相当标准的样板代码开始
这个应用程序将简单地呈现模板index.html
。我已经手动指定了端口。
接下来,我们将添加函数来获取图像。我们希望能够上传图像到网站。我们也希望能够提供一个网址和图像将自动下载的网站。我已经创建了如下代码。
这段代码允许我们将图像上传到后端(POST 请求)。或者我们可以提供一个 url 的后端,它会自动下载图像(获取请求)。该代码还将图像转换成一个jpg
。我无法用探测器 2 对png
图像进行推断。所以我们必须转换成一个jpg
。
如果代码因为某种原因不能下载图像,它将返回failure.html
模板。这基本上只是一个简单的html
页面,说明在检索图像时出现了错误。
另外,我指定了一个不同的@app.route
。这需要反映在index.html
文件中。
前端
现在我将创建前端html
代码。这个接口允许用户上传图片或者指定图片的 url。
没什么大不了的。我们创建一个简单的表单,并告诉它链接到@app.route(‘/detect’) flask 代码。我们还需要指定方法。如果用户上传的是图片,那就是 POST。如果用户给我们一个图片的 url,那就是 GET。
failure.html
模板甚至更简单。
现在我们可以进入实际的深度学习部分。
在这一部分,我们将得到一个 detectron2 预训练模型来对图像进行推理。然后我们将它链接到我们现有的后端。
这部分稍微复杂一点。我们将创建一个名为Detector
的新类。因为我们将创建探测器 2 所需的cfg
。然后,我们将创建另一个函数来对图像进行推理。
我将使用在 COCO 数据集上训练的 mask rcnn 预训练模型。它将使用一个 ResNet + FPN 主干。据说这款机型获得了最好的速度/精度权衡。
这段代码基本上完成了我们推理所需的一切。我们只需要指定我们下载的预训练模型的路径。
它从模型动物园中自动获取对应于我们的预训练模型的配置。它还应该从模型动物园获得预训练模型。但是我发现这在 docker 中并不奏效——至少对我来说是这样。
下一步是将这个Detector
类集成到我们现有的脚本中。
在这段代码中,我添加了我们之前创建的Detector
类。我还创建了一个名为run_inference
的函数。这是后端将在图像上运行 detectron2 模型的地方。它将接受一个图像路径,并通过我们之前创建的Detector
类调用 detectron2 模型。
一旦实例分割完成,run_inference
函数将返回一个图像。我不得不对run_inference
函数的结果做一些不寻常的事情来让它工作。result_img
被粘贴到文件对象中,该文件对象作为 png 返回。不过,可能有更好的方法来做到这一点。
最后一步是为我们的代码创建 docker 容器。然后我们将在本地部署 docker 容器。
谢天谢地,detectron2 已经为我们创建了一个 dockerfile 。
我基本上使用了 detectron2 的 github repo 中提供的 dockerfile。但是我做了一些改变。
我添加了一个[requirements.txt](https://github.com/spiyer99/detectron2_web_app/blob/master/requirements.txt)
文件。我在需求文件中做了一个pip install
。安装了一些我们需要的库。我还修改了命令来启动我们之前创建的app.py
脚本。这将启动 flask 应用程序并呈现index.html
模板。
现在我们可以启动 docker 容器了。我们可以通过以下方式实现这一点:
docker build . -f Dockerfile -t detectron2 &&\
docker run -d -p 8080:8080 detectron2
这将在当前工作目录中构建当前 dockerfile。然后它将在端口 8080 上运行该映像。这是我之前指定的端口。
但问题是,如果你一直运行这些命令,你的电脑上会有太多的 docker 镜像和容器。这会在你的电脑上占据大量的空间。
Jim Hoskins 对此有一个非常优雅的解决方案,我根据自己的目的进行了修改。
我创建了一个不错的 shell 脚本:
- 停止所有容器
- 移除未标记的容器
- 生成新的容器
- 在端口 8080 上运行容器
- 显示容器的尾部日志
这个脚本非常有用。
从终端运行这个脚本。它将构建并运行 detectron2 web 应用程序。网络应用应该会出现在你浏览器的localhost:8080
上。
作者图片
有用!
这方面的代码可以在 github 上找到。
原载于 2020 年 7 月 19 日https://spiyer 99 . github . io。
基于掩模 R-CNN 的实例分割
使用在 MS COCO 数据集上训练的 Mask R-CNN 的简要指南
对象检测和实例分割—输入图像源共享空间
诸如 YOLO、R-CNN 的目标检测模型帮助我们画出围绕目标的边界框,并且实例分割为我们提供了图像中每个目标的像素级掩模。一个问题可能会出现,为什么我们需要逐像素定位?
如果我们只是在自动驾驶汽车中使用对象检测,那么有可能多辆汽车的边界框重叠,自动驾驶汽车在这种情况下会变得混乱。实例分割可以避免这个缺陷。损伤检测和医学诊断是我想到的一些其他应用,因为知道损伤的程度或脑瘤的大小可能比仅仅检测存在更重要。
相交边界框和非重叠遮罩
在上面的图像中,我们可以看到汽车的边界框是相交的,而类名为“汽车”的蒙版没有相交/重叠。
因此,我们将介绍如何使用掩模 R-CNN(掩模区域 CNN)进行实例分割,然后使用掩模 R-CNN,我们可以获得图像中每个对象的逐个像素位置和边界框坐标。
面具 R-CNN
屏蔽 R-CNN 结合了更快的 R-CNN 和 FCN(全连接网络)以获得除类和盒输出之外的额外屏蔽输出。也就是说,Mask R-CNN 采用相同的两阶段过程,具有相同的第一阶段(即 RPN:区域提议网络)。第二阶段使用 RoIPool 从每个候选框中提取特征,并执行分类和包围盒回归。阅读本文以获得关于 R-CNN 面具的更详细的想法
屏蔽 R-CNN 模型— 来源
我使用了基于 FPN 和 matterport 的 ResNet101 构建的 Mask R-CNN 进行实例分割。该模型在 MS COCO 上进行预训练,这是一个具有 80 个对象类的大规模对象检测、分割和字幕数据集。
在浏览代码之前,确保安装所有需要的包并屏蔽 R-CNN。
安装 Keras 和其他依赖项:
$ pip install numpy scipy keras h5py tensorflow
$ pip install pillow scikit-image matplotlib imutils
$ pip install "IPython[all]"
克隆 GitHub 存储库并安装 Mask R-CNN 的 matterplot 实现
$git clone [https://github.com/matterport/Mask_RCNN.git](https://github.com/matterport/Mask_RCNN.git)
$cd Mask_RCNN
$python setup.py install
注意:如果您已经安装或使用了 tensorflow v2.0 ,那么您在执行脚本时可能会遇到一些回溯错误,因为 Mask R-CNN 使用的是 tensorflow v1.3.0
为了避免这种情况,您可以降级 tensorflow 版本,或者在安装 Mask R-CNN 之前,通过替换以下函数来编辑文件 Mask_RCNN/rcnn/model.py:
tf.log()
->-tf.math.log()
tf.sets.set_intersection()
->-tf.sparse_tensor_to_dense()
->-tf.sparse.to_dense()
tf.to_float()
->-
现在,我们开始执行脚本:
第一步:导入所需的包
from mrcnn.config import Config
from mrcnn import model as modellib
from mrcnn import visualize
import cv2
import colorsys
import argparse
import imutils
import random
import os
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
第二步:为每个类标签生成随机颜色。
现在我们创建一个配置,它定义了将在下一步中加载的模型的一些属性。
如果您的 GPU 可以处理变量 IMAGES_PER_GPU,您可以随意增加它的值,否则(在 CPU 的情况下)保持它为 1。
class SimpleConfig(Config):
# give the configuration a recognizable name
NAME = "coco_inference"
# set the number of GPUs to use along with the number of images
# per GPU
GPU_COUNT = 1
IMAGES_PER_GPU = 1
# number of classes on COCO dataset
NUM_CLASSES = 81
第四步:创建一个配置类对象,加载模型权重。
您可以从这里下载重量。
config = SimpleConfig()
config.display()
model = modellib.MaskRCNN(mode="inference", config=config, model_dir=os.getcwd())
model.load_weights("mask_rcnn_coco.h5", by_name=True)
步骤五:对任意图像进行正向传递,得到分割输出。
在这一步中,我们通过加载的模型传递一个图像,以便获得带有类标签、边界框坐标和遮罩的输出变量。
image = cv2.imread("<image_path&name>")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = imutils.resize(image, width=512)
# perform a forward pass of the network to obtain the results
print("[INFO] making predictions with Mask R-CNN...")
result = model.detect([image], verbose=1
步骤六:可视化输出
r1 = result[0]
visualize.display_instances(image, r1['rois'], r1['masks'], r1['class_ids'], CLASS_NAMES, r1['scores'])
样本输出:
在 COCO 上训练的 Mask R-CNN 模型创建了我同学的像素地图。
面具 R-CNN 视角下的印度拥挤街道
总结这篇文章,我会说实例分割是对象检测的一个进一步的步骤,因为它产生了图像的像素掩码。更快的 R-CNN 计算量很大,我们在 Mask R-CNN 的基础上引入了实例分割。因此,掩模 R-CNN 在计算上变得更加昂贵。这使得 Mask R-CNN 很难在 CPU 上实时运行。
参考文献