开源
H2O:可扩展的机器学习平台
来源:元经纪     阅读:392
网站管理员
发布于 2023-03-08 10:00
查看主页
概述:H2O 是一个开源、分布式、快速且可扩展的机器学习平台:深度学习、梯度提升 (GBM) 和 XGBoost、随机森林、广义线性建模(带弹性网络的 GLM)、K-Means、PCA、广义加性模型(GAM) )、RuleFit、支持向量机 (SVM)、堆叠集成、自动机器学习 (AutoML) 等。

1.下载H2O-3

虽然此 README 的大部分内容是为自己构建的开发人员编写的,但大多数 H2O 用户只是下载并使用预构建版本。如果您是 Python 或 R 用户,安装 H2O 的最简单方法是通过PyPI或Anaconda(对于 Python)或CRAN(对于 R):

Python

pip install h2o

R

install.packages("h2o")

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

有关最新的稳定版、每晚版、Hadoop(或 Spark / Sparkling Water)版本或独立的 H2O jar,请访问:https ://h2o.ai/download

有关下载和安装 H2O 的更多信息,请参阅H2O 用户指南。

2.开源资源

大多数人与三四个主要开源资源进行交互: GitHub(您已经找到)、JIRA(用于错误报告和问题跟踪)、用于 H2O 代码/软件特定问题的Stack Overflow和h2ostream(Google Group /电子邮件讨论论坛)以解决不适合 Stack Overflow 的问题。还有一个Gitter H2O 开发人员聊天组,但是为了存档目的和最大化可访问性,我们更希望在 Stack Overflow 上进行标准的 H2O 问答。

2.1 问题跟踪和功能请求

(注意:该项目只有一个问题跟踪系统。GitHub 问题未启用;您必须使用 JIRA。)

您可以在我们的开源JIRA中浏览和创建新问题:http : //jira.h2o.ai

  • 您可以在不登录 JIRA 的情况下浏览和搜索问题:
    1. 点击Issues菜单
    2. 点击Search for issues
  • 创建问题(错误或功能请求),请先为自己创建一个帐户:
    1. 单击屏幕右上角的Log In按钮
    2. 单击Create an acccount登录框底部附近
    3. 创建帐户并登录后,使用Create菜单上的按钮创建问题
    4. 在PUBDEV项目中创建 H2O-3 问题。(注意:苏打水问题应在SW项目下归档。)
  • 您还可以为功能请求和/或其他问题投票。投票可以帮助 H2O 确定每个版本中包含的功能的优先级。
    1. 转到H2O JIRA 页面
    2. 如果您还没有帐户,请单击登录以登录或创建一个帐户。
    3. 搜索您想要设置优先级的功能,或创建新功能。
    4. 单击“为此问题投票”链接。它位于“人员”部分下问题的右侧。

2.2 H2O资源列表

JIRA——在此处提交错误报告/跟踪问题

PUBDEV项目包含当前 H2O-3 项目的问题)

Stack Overflow——在这里询问所有代码/软件问题

http://stackoverflow.com/questions/tagged/h2o

交叉验证(Stack Exchange)——在这里问算法/理论问题

https://stats.stackexchange.com/questions/tagged/h2o

h2ostream Google Group——在这里提出与代码无关的问题

网址:https ://groups.google.com/d/forum/h2ostream

3. 使用 H2O-3 工件

每个夜间构建都会将 R、Python、Java 和 Scala 工件发布到特定于构建的存储库。特别是,您可以在 maven/repo 目录中找到 Java 工件。

这是使用 h2o-3 作为依赖项的 gradle 构建文件的示例片段。将 x、y、z 和 nnnn 替换为有效数字。

// h2o-3 dependency information
def h2oBranch = 'master'
def h2oBuildNumber = 'nnnn'
def h2oProjectVersion = "x.y.z.${h2oBuildNumber}"

repositories {
  // h2o-3 dependencies
  maven {
    url "https://s3.amazonaws.com/h2o-release/h2o-3/${h2oBranch}/${h2oBuildNumber}/maven/repo/"
  }
}

dependencies {
  compile "ai.h2o:h2o-core:${h2oProjectVersion}"
  compile "ai.h2o:h2o-algos:${h2oProjectVersion}"
  compile "ai.h2o:h2o-web:${h2oProjectVersion}"
  compile "ai.h2o:h2o-app:${h2oProjectVersion}"
}

有关安装夜间构建工件的信息,请参阅最新的 H2O-3 前沿夜间构建页面。

有关如何将 Java 工件与 gradle 结合使用的工作示例,请参阅h2o-droplets GitHub 存储库。

注意:稳定的 H2O-3 工件会定期发布到 Maven Central(单击此处进行搜索),但可能会大大落后于 H2O-3 Bleeding Edge 每晚构建。

4. 建造 H2O-3

H2O 开发入门需要JDK 1.8 + 、Node.jsGradlePythonR。我们使用 Gradle 包装器(称为gradlew)来确保在您的开发目录中安装最新本地版本的 Gradle 和其他依赖项。

4.1. 建造前

构建h2o需要正确设置具有所需包的 R 环境和具有以下包的 Python 环境:

grip
future
tabulate
requests
wheel

要安装这些包,您可以使用pipconda。如果您在Windows上安装这些软件包时遇到问题,请按照本指南的“在 Windows 上安装”部分进行操作。

(注意:建议使用一些虚拟环境,如VirtualEnv,来安装所有包。)

4.2. 从命令行构建(快速入门)

要从存储库构建 H2O,请执行以下步骤。

秘诀 1:全新克隆、构建、跳过测试并运行 H2O

# Build H2O
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew build -x test

You may encounter problems: e.g. npm missing. Install it:
brew install npm

# Start H2O
java -jar build/h2o.jar

# Point browser to http://localhost:54321

秘诀 2:全新克隆、构建和运行测试(需要 R 的有效安装)

git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build

注意事项

运行测试会启动五个测试 JVM,它们形成一个 H2O 集群并且需要至少 8GB 的​​ RAM(最好是 16GB 的 RAM)。 ./gradlew syncRPackages在 Windows、OS X 和 Linux 上支持运行,强烈建议但不是必需的。./gradlew syncRPackages使用测试和构建所需的包的预批准版本确保完整和一致的环境。这些包可以手动安装,但我们建议设置 ENV 变量并使用./gradlew syncRPackages. 要设置 ENV 变量,请使用以下格式(其中 `${WORKSPACE} 可以是任何路径):
mkdir -p ${WORKSPACE}/Rlibrary
export R_LIBS_USER=${WORKSPACE}/Rlibrary

秘诀 3:拉取、清理、构建和运行测试

git pull
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew clean
./gradlew build

笔记

我们建议./gradlew clean在每个git pull.

-x test通过在末尾添加 gradle build 命令行来跳过测试。测试通常在配备 4 个 CPU(8 个超线程)和 16 GB RAM 的 Macbook Pro 笔记本电脑上运行 7-10 分钟。

每次拉取后不需要同步小数据,但如果测试由于丢失数据文件而失败,那么请尝试./gradlew syncSmalldata作为第一个故障排除步骤。同步 smalldata 会将数据文件从 AWS S3 下载到工作区中的 smalldata 目录。同步是增量的。不要签入这些文件。smalldata 目录位于 .gitignore 中。如果不运行任何测试,则不需要 smalldata 目录。

./gradlew syncRPackages在 Windows、OS X 和 Linux 上支持运行,强烈建议但不是必需的。./gradlew syncRPackages使用测试和构建所需的包的预批准版本确保完整和一致的环境。这些包可以手动安装,但我们建议设置 ENV 变量并使用./gradlew syncRPackages. 要设置 ENV 变量,请使用以下格式(${WORKSPACE}可以是任何路径):

mkdir -p ${WORKSPACE}/Rlibrary
export R_LIBS_USER=${WORKSPACE}/Rlibrary

秘诀 4:只构建文档

./gradlew clean && ./gradlew build -x test && (export DO_FAST=1; ./gradlew dist)
open target/docs-website/h2o-docs/index.html

秘诀 5:使用 Makefile 构建

git 存储库的根目录包含一个 Makefile,其中包含方便的快捷方式,用于开发中使用的频繁构建目标。要h2o.jar在跳过测试的同时构建以及构建替代程序集,请执行

make

h2o.jar使用最小程序集构建,请运行

make minimal

最小装配非常适合开发 H2O 机器学习算法。它不捆绑一些重量级依赖项(如 Hadoop),使用它可以节省构建时间以及从 Maven 存储库下载大型库的需要。

4.3. 在 Windows 上设置

第 1 步:下载并安装WinPython

在命令行中,验证python通过使用which python(或sudo which python)使用新安装的包。使用 WinPython 路径更新环境变量。

第 2 步:安装所需的 Python 包:
pip install grip future tabulate wheel
第三步:安装JDK

安装Java 1.8+并将C:\Program Files\Java\jdk1.7.0_65\bin带有 java.exe 的相应目录添加到环境变量中的 PATH。要确保命令提示符检测到正确的 Java 版本,请运行:

javac -version

CLASSPATH 变量也需要设置为 JDK 的 lib 子文件夹:

CLASSPATH=/<path>/<to>/<jdk>/lib
步骤 4. 安装 Node.js

安装Node.js并将安装的目录添加C:\Program Files\nodejs到 PATH 中,如果尚未添加,则该目录必须包含 node.exe 和 npm.cmd。

步骤 5. 安装 R、所需的包和 Rtools:

安装R并将 bin 目录添加到您的 PATH(如果尚未包含)。

安装以下 R 包:

要从 R 会话中安装这些包:

pkgs <- c("RCurl", "jsonlite", "statmod", "devtools", "roxygen2", "testthat")
for (pkg in pkgs) {
  if (! (pkg %in% rownames(installed.packages()))) install.packages(pkg)
}

请注意,安装RCurl R 包需要libcurl 。

请注意,此包不包括运行测试,它们仅用于构建 H2O。

最后,安装Rtools,它是一个命令行工具集合,用于促进 Windows 上的 R 开发。

注意:在安装 Rtools 期间,不要安装Cygwin.dll。

步骤 6. 安装Cygwin

注意:在安装 Cygwin 期间,取消选择 Python 包以避免与 Python.org 包发生冲突。

步骤 6b。验证 Cygwin

如果已安装 Cygwin,请删除 Python 包或确保 Native Python 在 PATH 变量中位于 Cygwin 之前。

步骤 7. 更新或验证 Windows PATH 变量以包含 R、Java JDK、Cygwin。
步骤 8. Git 克隆h2o-3

如果您还没有 Git 客户端,请安装一个。默认的可以在这里找到http://git-scm.com/downloads。确保在安装前启用了命令提示符支持。

下载和更新 h2o-3 源代码:

git clone https://github.com/h2oai/h2o-3
第 9 步。运行顶级 gradle 构建:
cd h2o-3
./gradlew.bat build

如果您遇到错误,请再次运行以--stacktrace获取有关缺少依赖项的更多说明。

4.4. 在 OS X 上设置

如果您没有Homebrew,我们建议您安装它。它使 OS X 的包管理变得容易。

步骤 1. 安装 JDK

安装Java 1.8+。要确保命令提示符检测到正确的 Java 版本,请运行:

javac -version
步骤 2. 安装 Node.js:

使用自制软件:

brew install node

否则,从NodeJS 网站安装。

步骤 3. 安装 R 和所需的包:

安装R并将 bin 目录添加到您的 PATH(如果尚未包含)。

安装以下 R 包:

要从 R 会话中安装这些包:

pkgs <- c("RCurl", "jsonlite", "statmod", "devtools", "roxygen2", "testthat")
for (pkg in pkgs) {
  if (! (pkg %in% rownames(installed.packages()))) install.packages(pkg)
}

请注意,安装RCurl R 包需要libcurl 。

请注意,此包不包括运行测试,它们仅用于构建 H2O。

步骤 4. 安装 python 和所需的包:

安装python:

brew install python

安装 pip 包管理器:

sudo easy_install pip

接下来安装所需的包:

sudo pip install wheel requests future tabulate  
步骤 5. Git 克隆h2o-3

OS X 应该已经安装了 Git。下载和更新 h2o-3 源代码:

git clone https://github.com/h2oai/h2o-3
第 6 步。运行顶级 gradle 构建:
cd h2o-3
./gradlew build

注意:在普通机器上运行所有测试可能需要很长时间(大约一个小时)。

如果您遇到错误,请再次运行以--stacktrace获取有关缺少依赖项的更多说明。

4.5. 在 Ubuntu 14.04 上设置

步骤 1. 安装 Node.js
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
sudo apt-get install -y nodejs
步骤 2. 安装 JDK:

安装Java 8。可以在此处找到安装说明JDK 安装。要确保命令提示符检测到正确的 Java 版本,请运行:

javac -version
步骤 3. 安装 R 和所需的包:

安装说明可以在这里找到R 安装。单击“下载 R for Linux”。点击“ubuntu”。按照给定的说明进行操作。

要安装所需的软件包,请按照与上述 OS X 相同的说明进行操作

注意:如果该过程无法在 Linux 上安装 RStudio Server,请运行以下操作之一:

sudo apt-get install libcurl4-openssl-dev

或者

sudo apt-get install libcurl4-gnutls-dev

步骤 4. Git 克隆h2o-3

如果您还没有 Git 客户端:

sudo apt-get install git

下载和更新 h2o-3 源代码:

git clone https://github.com/h2oai/h2o-3
第 5 步。运行顶级 gradle 构建:
cd h2o-3
./gradlew build

如果遇到错误,请再次运行以--stacktrace获取有关缺少依赖项的更多说明。

确保您没有以 root 身份运行,因为bower这样的运行会被拒绝。

4.6. 在 Ubuntu 13.10 上设置

步骤 1. 安装 Node.js
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install -y nodejs
步骤 2-4。按照 Ubuntu 14.04(上文)的步骤 2-4

4.7. 在 CentOS 7 上设置

cd /opt
sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz"

sudo tar xzf jdk-7u79-linux-x64.tar.gz
cd jdk1.7.0_79

sudo alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2

sudo alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 2
sudo alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 2
sudo alternatives --set jar /opt/jdk1.7.0_79/bin/jar
sudo alternatives --set javac /opt/jdk1.7.0_79/bin/javac

cd /opt

sudo wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo rpm -ivh epel-release-7-5.noarch.rpm

sudo echo "multilib_policy=best" >> /etc/yum.conf
sudo yum -y update

sudo yum -y install R R-devel git python-pip openssl-devel libxml2-devel libcurl-devel gcc gcc-c++ make openssl-devel kernel-devel texlive texinfo texlive-latex-fonts libX11-devel mesa-libGL-devel mesa-libGL nodejs npm python-devel numpy scipy python-pandas

sudo pip install scikit-learn grip tabulate statsmodels wheel

mkdir ~/Rlibrary
export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/jre/bin
export R_LIBS_USER=~/Rlibrary

# install local R packages
R -e 'install.packages(c("RCurl","jsonlite","statmod","devtools","roxygen2","testthat"), dependencies=TRUE, repos="http://cran.rstudio.com/")'

cd
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3

# Build H2O
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build -x test

5.构建后启动H2O

要在本地启动 H2O 集群,请在命令行上执行以下命令:

java -jar build/h2o.jar

H2O 用户指南中提供了可用的启动 JVM 和 H2O 选项列表(例如-Xmx-nthreads-ip)。

6. 在 Hadoop 上构建 H2O

下载页面上提供了预先构建的 H2O-on-Hadoop zip 文件。每个 Hadoop 分发版本在 h2o-3 中都有一个单独的 zip 文件。

要自己构建支持 Hadoop 的 H2O,首先安装 sphinx for python:pip install sphinx 然后从顶级 h2o-3 目录输入以下内容开始构建:

export BUILD_HADOOP=1;
./gradlew build -x test;
./gradlew dist;

这将创建一个名为“target”的目录并在那里生成 zip 文件。请注意,BUILD_HADOOP当用户名是jenkins(请参阅settings.gradle)时,这是默认行为;否则你必须请求它,如上所示。

要仅为选定的发行版构建 zip 文件,请将H2O_TARGETenv 变量与 一起使用BUILD_HADOOP,例如:

export BUILD_HADOOP=1;
export H2O_TARGET=hdp2.5,hdp2.6
./gradlew build -x test;
./gradlew dist;

添加对新版本 Hadoop 的支持

在该h2o-hadoop目录中,每个 Hadoop 版本都有一个用于驱动程序的构建目录和一个用于 fatjar 的程序集目录。

你需要:

  1. 在中添加新的驱动目录和程序集目录(各有一个build.gradle文件)h2o-hadoop
  2. 将这些新项目添加到h2o-3/settings.gradle
  3. 将新的 Hadoop 版本添加到HADOOP_VERSIONSinmake-dist.sh
  4. 将新的 Hadoop 版本添加到列表中h2o-dist/buildinfo.json

安全的用户模拟

Hadoop通过其 Java API支持安全的用户模拟。可以允许经过 kerberos 身份验证的用户代理满足在 NameNode 的 core-site.xml 文件中输入的指定条件的任何用户名。此模拟仅适用于与 Hadoop API 或支持它的 Hadoop 相关服务的 API 的交互(这与切换到原始机器上的该用户不同)。

设置安全用户模拟(对于 h2o):

  1. 创建或找到一个 id 以用作对 HDFS 或相关服务的访问受限或无访问的代理;代理用户只需要用于模拟用户
  2. (如果不使用 h2odriver 则需要)如果您不使用驱动程序(例如,您使用 Hadoop 针对 h2o 的 API 编写了自己的代码),请进行必要的代码更改以模拟用户(请参阅org.apache.hadoop.security.UserGroupInformation
  3. 在 Ambari/Cloudera Manager 中或直接在 NameNode 的 core-site.xml 文件中,为我们希望用作代理的用户添加 2/3 属性(替换为简单的用户名 - 而不是完全限定的主体名称) .
    • hadoop.proxyuser.<proxyusername>.hosts: 允许代理用户代表有效用户执行模拟操作的主机
    • hadoop.proxyuser.<proxyusername>.groups: 模拟用户必须属于的组,模拟才能与该代理用户一起工作
    • hadoop.proxyuser.<proxyusername>.users: 允许代理用户模拟的用户
    • 例子:<property> <name>hadoop.proxyuser.myproxyuser.hosts</name> <value>host1,host2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.groups</name> <value>group1,group2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.users</name> <value>user1,user2</value> </property>
  4. 重启 HDFS 和 YARN 等核心服务以使更改生效

模拟的 HDFS 操作可以在 hdfs 审计日志中查看('auth:PROXY' 应该出现在ugi=适用的条目的字段中)。YARN 同样应该在资源管理器 UI 的某处显示“auth:PROXY”。

要使用 h2o 的 Hadoop 驱动程序进行安全模拟:

在尝试此操作之前,请参阅下面的冒充风险

使用 h2odriver 时(例如,当使用 运行时),除了需要的任何其他参数之外,还hadoop jar ...指定-principal <proxy user kerberos principal>-keytab <proxy user keytab path>和。-run_as_user <hadoop username to impersonate>如果配置成功,代理用户将登录并模拟-run_as_user,只要该用户被用户或组配置属性(如上配置)所允许;这是由 HDFS 和 YARN 强制执行的,而不是 h2o 的代码。驱动程序有效地将其安全上下文设置为模拟用户,因此所有支持的 Hadoop 操作都将作为该用户执行(例如 YARN、HDFS API 支持安全模拟用户,但其他人可能不支持)。

利用安全模拟时要采取的预防措施

  • 安全模拟的目标用例是预验证用户然后使用(在本例中)代表该用户的 h2odriver 的应用程序或服务。H2O 的 Steam 是一个完美的例子:通过 SSL 在 Web 应用程序中验证用户,在创建 h2o YARN 容器时模拟该用户。
  • 代理用户在Hadoop集群中应该有有限的权限;这意味着没有访问数据或进行 API 调用的权限。这样,如果它遭到破坏,它就只能模拟集群中特定的用户子集,并且只能来自特定的机器。
  • hadoop.proxyuser.<proxyusername>.hosts尽可能或实际使用该物业。
  • 不要将代理用户名的密码或密钥表提供给您不想冒充其他用户的任何用户(这通常是任何用户)。模仿的重点是不允许用户互相模仿。请参阅典型用例的第一个项目符号。
  • 只要可行,限制用户登录到代理发生的机器。
  • 确保用于登录代理用户的密钥表得到适当保护,并且用户无法以该 ID 登录(su例如,通过 )
  • 切勿将 hadoop.proxyuser..{users,groups} 设置为“*”或“hdfs”、“yarn”等。允许任何用户冒充 hdfs、yarn 或任何其他重要用户/组时应格外小心,并且在允许之前进行了强烈分析。

安全模拟的风险

  • 执行模拟的 ID 可以像任何其他用户 ID 一样受到损害。
  • 将任何hadoop.proxyuser.<proxyusername>.{hosts,groups,users}属性设置为“*”都会大大增加安全风险。
  • 如果用户在与驱动程序一起使用之前未经过身份验证(例如,就像 Steam 通过安全的 Web 应用程序/API 所做的那样),则很难对流程/系统进行审核。
$ git diff
diff --git a/h2o-app/build.gradle b/h2o-app/build.gradle
index af3b929..097af85 100644
--- a/h2o-app/build.gradle
+++ b/h2o-app/build.gradle
@@ -8,5 +8,6 @@ dependencies {
   compile project(":h2o-algos")
   compile project(":h2o-core")
   compile project(":h2o-genmodel")
+  compile project(":h2o-persist-hdfs")
 }

diff --git a/h2o-persist-hdfs/build.gradle b/h2o-persist-hdfs/build.gradle
index 41b96b2..6368ea9 100644
--- a/h2o-persist-hdfs/build.gradle
+++ b/h2o-persist-hdfs/build.gradle
@@ -2,5 +2,6 @@ description = "H2O Persist HDFS"

 dependencies {
   compile project(":h2o-core")
-  compile("org.apache.hadoop:hadoop-client:2.0.0-cdh4.3.0")
+  compile("org.apache.hadoop:hadoop-client:2.4.1-mapr-1408")
+  compile("org.json:org.json:chargebee-1.0")
 }

7.Sparkling Water

Sparkling Water 结合了两种开源技术:Apache Spark 和 H2O 机器学习平台。它使 H2O 的高级算法库(包括深度学习、GLM、GBM、K-Means 和分布式随机森林)可从 Spark 工作流访问。Spark 用户可以从任一平台中选择最佳功能来满足他们的机器学习需求。用户可以将 Spark 的 RDD API 和 Spark MLLib 与 H2O 的机器学习算法相结合,或者独立于 Spark 使用 H2O 进行模型构建过程,并在 Spark 中对结果进行后处理。

Sparkling Water 资源

8.文档

文档主页

H2O 的主要文档是H2O 用户指南。访问http://docs.h2o.ai获取 H2O 项目文档的顶级介绍。

生成 REST API 文档

要生成 REST API 文档,请使用以下命令:

cd ~/h2o-3
cd py
python ./generate_rest_api_docs.py  # to generate Markdown only
python ./generate_rest_api_docs.py --generate_html  --github_user GITHUB_USER --github_password GITHUB_PASSWORD # to generate Markdown and HTML

生成文档的默认位置是build/docs/REST.

如果构建失败,请尝试gradlew clean,然后git clean -f

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
中国5G“联”出智慧未来新图景
《中国元宇宙》纪录片开机暨“元宇宙中国行”——活动发布会
争议升级:元宇宙是否是人类的终极梦想?
光伏电站用上“保洁机器人”
本报今起推出《科创前沿》版

首页

分类

定制方案

消息

我的