Maven就是是专门为Java项目打造的管理和构建工具,它的主要功能有:
其中,在项目中需要引用依赖时,Maven请求构件的流程图如下
其中远程仓库和镜像仓库地址皆可为我们的私服地址,目前主流的私服搭建工具为Nexus,例如阿里云的Maven旧版仓库就是搭建在Nexus上的。
Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。Nexus常被用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven仓库管理器”。除此之外,Nexus还可创建npm、pypi等的仓库。
进入Nexus官网下载页面。
填好一些信息后,选择所需要的版本,因为我的开发环境是Windows,所以下面以Windows作为示例。
官网上下载下来的Nexus3是个zip压缩包,解压到合适的路径下,解压好后包含两个文件夹,分别为nexus-3.xx.xx-xx和sonatype-work,我的版本为nexus-3.47.1-01,进入该文件夹下的etc目录,用文本处理软件打开nexus-default.properties
修改application-port自定义私服仓库端口号,修改application-host自定义私服仓库IP,默认为localhost和8081,例如,可以设置端口为9999(ps:chrome等浏览器会限制6666等的部分端口,将其视为不安全的端口,如果遇到此类问题可以查查是否是因为端口受到限制而无法打开。)
保存配置文件后,返回nexus-3.47.1-01目录,进入bin目录,在命令提示符中打开该路径,输入nexus.exe /install
安装服务,默认服务名是nexus,安装后的服务可以在开机后自动启动。接着输入nexus.exe /start
启动服务,稍等片刻后输入http://localhost:9999/ 即可进入Nexus3仓库。
首次进入Nexus仓库会提示输入用户名和密码,与Nexus2不同,Nexus3默认的用户名为admin,但是密码不再默认为admin123,需要进入sonatype-work文件夹,该文件夹下有个admin.password文件,用文本处理软件打开复制即可,后续会提示输入新密码,是否允许匿名登录等,根据需求进行配置即可。
Nexus仓库分为以下 3 个类型:
代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。
宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。
仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。
由上图可知:
Maven 可以直接从宿主仓库中下载构件。
Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。
依次点击页面上的齿轮,Repositories,Create repository,maven2(hosted)来创建一个宿主仓库。
例如,我打算创建一个用来存放中央仓库中没有的第三方jar包仓库,可以给它起名3rd-party,Version policy默认为Release,此处强烈推荐使用Mixed,否则若之后想要上传SNAPSHOT版本的jar包会很麻烦。Deployment policy默认为Disable redepoly,此处推荐使用Allow redeploy。
点击页面最下方的Create repository按钮即可完成仓库的创建。
和上一步相似,依次点击页面上的齿轮,Repositories,maven-central来进行代理仓库的配置。
Remote storage可以修改为阿里云maven组仓库的地址https://maven.aliyun.com/repository/public
,来提升构件下载的速率,点击页面最下方的Save按钮即可完成代理仓库的配置修改。需要注意的是,Nexus默认存在的代理仓库的版本策略是Release的,如果需要Mixed策略,则需要重新创建一个代理仓库。
和Nexus2可以直接拖动整个仓库到Nexus文件夹下不同,Nexus3仅提供了手动上传的方法,该方法单次只能上传一个构件,效率十分低下,而且在输入构件信息的过程中,很容易出错。
这里推荐使用批量上传的方法:
前提:windows执行shell脚本,务必安装git 客户端工具。(因为需要执行sh文件)
#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
在该目录下点击右键,点击Git Bash Here
打开的窗口中,执行命令
./mavenimport.sh -u 用户名 -p 密码 -r http://IP:端口/repository/仓库名/
运行结束后,即可在Nexus仓库中查看上传的构件。
我在开发中所采用的组仓库配置策略为,组仓库包含了三方包仓库、代理仓库、发行版仓库、快照版仓库,后续只暴露组仓库的地址即可满足项目从这些仓库中下载构件。
settings.xml是用来设置Maven参数的配置文件,并且settings.xml是maven的全局配置文件,而pom.xml文件是所在项目的局部配置。
settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
最好直接复制一个配置好的文件进行修改,自己配置容易出错。我在Maven的根目录下,复制了一个settings.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库地址 -->
<!-- <localRepository>C:\Users\Azha\.m2\repository</localRepository> -->
<!-- 以下配置为上传jar包配置 -->
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<!-- id,对应项目里面pom.xml里面distributionManagement配置的id -->
<id>maven-releases</id>
<!-- 登录nexus的用户名 -->
<username>admin</username>
<!-- 登录nexus的密码 -->
<password>admin123</password>
</server>
<server>
<!-- id,对应项目里面pom.xml里面distributionManagement配置的id -->
<id>maven-snapshots</id>
<!-- 登录nexus的用户名 -->
<username>admin</username>
<!-- 登录nexus的密码 -->
<password>admin123</password>
</server>
<!-- 配置拦截器mirror登录的用户名密码。他会拦截所有的请求到mirror指定的地址下载jar包 如果只需要去私服下载jar包则只需配置此项 -->
<server>
<!-- id,对应mirror中id -->
<id>nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<!-- 以下配置为下载jar包配置 通用 -->
<mirrors>
<!-- 强制让jar包下载走私服 -->
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:9999/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<!-- 对应activeProfiles-activeProfile的内容 -->
<id>nexus</id>
<!-- 仓库地址 -->
<repositories>
<repository>
<!-- 私服id,覆盖maven-model模块下的父id,让maven不走中央仓库下载,走私服下载 -->
<id>central</id>
<!-- 名字 -->
<name>Nexus</name>
<!-- 私服地址,写central后,会去mirror里面找 -->
<url>http://localhost:9999/repository/maven-public/</url>
<!-- 支持releases版本 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 支持snapshots版本 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件地址 -->
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Nexus Plugin Repository</name>
<url>http://localhost:9999/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<!-- 配置全局的url地址 供上传jar包时动态获取 -->
<properties>
<ReleaseRepository>http://localhost:9999/repository/maven-releases/</ReleaseRepository>
<SnapshotRepository>http://localhost:9999/repository/maven-snapshots/</SnapshotRepository>
</properties>
</profile>
</profiles>
<!-- 选择使用的profile -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
settings.xml参数较多,建议多看看资料,才能有较为深入的了解,否则很容易配置出错导致无法接入Nexus仓库。
若无需对代码进行打包发布,则无需进行此步骤。如果需要将代码打包上传到Nexus仓库中,则需要配置pom.xml文件,在
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>maven-releases</name>
<url>http://localhost:9999/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>http://localhost:9999/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
需要注意的是,仓库的id需要与settings.xml中server的id对应!
打开IDEA的Settings,打开Maven配置,Maven home path选择Maven根目录路径,User settings file选择上个步骤中写好的settings.xml文件,这里千万要记得勾选Override才可选择自定义的settings.xml,我将该文件放在了Maven的根目录下,便于后续修改。Local repository是本地仓库的地址,默认为C:\Users\你的用户名.m2\repository下,但会默认读取settings.xml中定义的仓库地址,勾选了Override后生效,也可以进一步选择自定义的本地仓库地址。
刷新,Reload All Maven Projects,构件就自动开始下载了!
如果需要发布自己的代码到仓库中,以此执行Maven的clean-deploy即可,可以在对应release或者snapshot仓库中看到打包好的jar包,后续在生产环境或者测试环境中即可随时拉取使用。
Maven基础
Nexus(Maven私服搭建)教程
nexus 3.x私服配置(windows版)
Nexus3.x批量导入本地库(Windows版)
Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
更多详见Github页面
想要了解更多样的流程图?请移步vue-super-flow😊
]]>1.11
试上岗 第一次到北京冬奥村 办公室还没整理出来 一群人在一张桌子上办公 学了校对订单表 建立数据透视表以及整理成物流领域所需要的表 还学了一些邮件回复流转单
1.12
第一次参观了冬奥村下沉广场,火炬、火种台、火种灯设计得都好好看;学着与物流领域对接、清点物资,奥运村的居住区的设计和景观都很好看;试着处理了几封邮件。
1.14
校对了一下日本的清单,转移到了下沉广场的办公室里,然后去清点了加拿大物资,拿下!
1.23
进入驻地
做了核酸
第一次干饭
收拾了东西,准备就绪
大晚上的去帮忙搬了下防疫物资
1.24
好久没有起这么早了
进到村里遇到一个晨跑的外国小姐姐,她很热情地说了一声hi 一时没有反应过来
第一次在工作人员餐厅干饭 对面的保安大哥太猛了 要了三个鸡蛋两个茶叶蛋
到了服务台,有几个代表团过来询问问题,在服务台和仓库之间来回轮。能够给被人解决问题还是很有意义的
两点半打卡下班(村里伙食不如酒店的好☹️)
果然还是酒店伙食好啊 牛仔骨吃到撑
1.25
联系了各个NOC助理,陆续有外国人来服务台咨询问题了,收费卡还收到了第一笔赛事订单,瑞士大叔很热情,我们还一起合照留念了。今天是北方的小年,和小伙伴们一起举杯小小庆祝了一下。
1.26
遇到了最严格的一次安检,感觉检查了得有十分钟,但伙食还有待提升。
早上遇到了好多事情。日本代表团订单付款未到账的问题,现写了一份承诺书。英国的小姐姐使用现金支付,也是第一次遇到,学了怎么开票、给现金消毒。还学了特制的Excel表单怎么使用。荷兰的环保意识真的很强,好像还把自行车带到中国来了哈哈。
1.27
今天来的人也多了
处理了好多国家的事务,业务也渐渐熟悉了!基本掌握了做台账的技术。面对越来越多的问题咨询也更得心应手了。和小伙伴们一起拍了新春祝福视频,明天又是早起的一天呀。
1.28
越来越多的人来咨询了问题了
还有很多人下了大单。西班牙上来就把手机库存一扫而光。原来美国也有一大笔钱没有支付。加拿大太逗了,上来就语气严肃地说给他配送的打印机不是他订的,最后发现他订的就不是他想要的。
1.29
Intel来交对讲机的钱,第一次这么长时间给外国人当翻译,但还是不顺溜,刚好翻译小姐姐前来救场,人都很nice,希望自己的英语水平能更上一个等级吧!
今天九华的晚饭令人失望了!
晚上发了很多纪念品和补给物资
1.30
休息一天改论文!
又分了好多防疫物资
发了个加拿大的pin!
1.31
除夕夜上班!
来了个加拿大的小姐姐,一直显示余额不足,想了好多办法,后来她的伙伴来刷卡了,但她的伙伴wechat被封了,求助我们,但最后还是没能帮她解封。
跑了两趟巴赫的房间送插线板,里边的官员态度好差,紧张的差点说不出话了!第一次穿防护服感觉好奇特。
除夕夜村里的伙食依旧令人心寒呜呜!
一到九点紧急下班,回到九华贴了春联和小老虎的画,收到了代金券红包,感觉有年味了!
2.1
下午忙了捷克大姐订购TV的事情,因为电视信号的问题并且赶时间还纠缠了一会儿,但后来大姐也开心地笑了。韩国一堆事情,感觉NOC助理一通翻译后,有了点矛盾,最后去给人家送白板和打印纸时,韩国小姐姐还有说有笑地送了三个徽章。我还是始终相信好的态度会传递给他人,除非是特别不讲道理的人。
今天村里的餐厅供应了饮料!赞!
2.2
今天早上没什么人,昨天的新西兰台账问题找出原因了。
去领了饮用水和防疫物资
整理了下文件。
下班出门遇见三个中国队的姑娘,感觉里面有个长得像谷爱凌?!!
2.3
整理了下台账。领了些物资。通知NOC助理们来订购插线板。
牙疼!好疼好疼好疼好疼!!!
2.4
休息日!
奥运会开幕啦!
StrongerTogether
2.5
今日没有大事发生
终于去到广场区逛了逛!
狠狠消费了一把 买了邮册和徽章
nice!
2.6
又是无事发生的一天!
一个下午竟然没有一笔订单
一天就只有一笔sim卡的订单
然后各个部门成立了摸鱼群😂
2.7
赛时果然很闲了!
今天遇到了阿根廷速度滑冰的小姐姐!
过去和她照了合照!
她很热情,期待她13号的比赛!
而且过几天竟然要开始上二休三了??
2.8
今天是谷爱凌摘奖牌首秀!
整个NOC中心都坐满了志愿者!
这种观赛氛围太好了
晚上在驻地酒店有换pin的活动
但俺还是舍不得代表团送的徽章
2.9
休假
驻地酒店志愿者组织了观星活动
感觉北大那个志愿者在发光
真好
这就是浪漫吧
2.10
业务 〇
😭
2.11
业务 〇
领了物资
2.12
休假
2.13
休假
大雪
2.14
休假
情人节
2.15
穿得厚厚的来上班
去领了防疫物资
代表团陆续要离村了
开了咨询会
现在估计要忙起来了
去旗帜广场逛了一圈
元宵节快乐
2.16
今天和赵哥哥做了一天的签出表和落位图
分了个数字胸牌
临走前还和阿塞拜疆的运动员换了pin
又有活干又有纪念品的一天
真的是太开心了!!
2.17
休假
2.18
休假
2.19
休假
2.20
第一次办理签出
标准扫楼很熬人
2.21
今天活很多
但是收获了一些些纪念品
意识到马上要结束这段旅程了
很舍不得
冬奥 整个过程 就是美好的
2.22
今天又扫楼了
很累
但是更多的是要离开冬奥村的负面情绪
真的很不舍
2.23
完成了美国的扫楼
下岗了
跑着出村的
圆满了
首先我很庆幸自己折腾了这么一个博客,可以让自己的思绪有个出口。近来越来越觉得「输出」是一个很重要的过程。它可以是总结过往的知识以及经验,在这个过程中,会发现一些自己曾经忽略的点,会对已有的认知有进一步的巩固和提升;也可以是情绪的收集站,任何大幅度波动的情绪都可以往这里面投送,避免自己被情绪左右,也让没有逻辑可循的情绪似乎有那么一点合理性。当然,还有一部分原因是自己不知道为什么,似乎不太有能向身边朋友倾诉自己的烦恼、负面想法的勇气了。这个博客作为「我」,还承担了「我的朋友」的这一身份👥
这篇博文原计划8.3完成,那天恰好是我研究生生涯的700天,但到今天正式下笔,已经是8.8了。期间这五天,我的宝贝从家乡回到北京,我们在一起度过一段十分快乐的时光,自己的情绪也得以平静了一些。我应该是一个不太能承受孤独的人,所以我很珍视身边的朋友关系、爱情、亲情,他们就好像我在孤独的汪洋中紧紧地抓着的那一条绳索。
今天距离2021年结束还有145天。在2021年的头几天,我设定了「🎯我的2021小目标」,现在盘点一下进度
在高校学习的这段时光,提升最多的应该就是自学能力以及找资料的能力,导师能给的帮助实在有限,方方面面都需要自己有足够的能力去完成自己想要达成的目标。前阵子看到了少数派上一篇写的很不错的文章,十分有共鸣,可惜不能够转载,在这里放上链接,感兴趣的朋友可以阅读一下:《从入门到程序员初长成:这是我的 Roadmap》。
这段时间还在炜哥的鼓励下有意的树立了一些习惯目标,也算是为磨练自己成为冬奥志愿者的能力,比如每天锻炼(也想在自己24岁生日的时候,送自己一个好身材以及健康的体魄)、背单词提升英语水平(我一直很希望自己能够熟练掌握一门外语语言,甚至多门),总之就是希望自己能有一些良好的生活习惯,不至于过得太消极。
阿扎,请再接再厉!
写这篇博文的时候,发现自己用了一些模棱两可的副词,“似乎”、“好像”、“应该”、“大概”……。可能我就很抗拒把一件事情说得很彻底,以至于后续没有迂回的余地。这是不是一个好的习惯,我不知道。
]]>注意: AirSim 也适用于 UE >= 4.22,但是,建议您更新到 >= 4.24。
注意:如果您有 UE 4.16 或更旧的项目,请参阅升级指南以升级您的项目。
git clone https://github.com/Microsoft/AirSim.git
,然后 cd AirSim
转到 AirSim 目录。build.cmd
。这将在 Unreal\Plugins 文件夹中创建可使用并可拖入任何 Unreal Project 中的插件。最后,您将需要一个 Unreal Project 为您的车辆承载环境。AirSim 附带一个内置的" Block 环境供您使用,或者您也可以创建自己的 Unreal Projec t。请参阅设置 Unreal Project 。
要快速熟悉并且运行,您可以使用 AirSim 附带的 Block 项目。为了保持仓库合理的大小,这并不是非常详细的环境,但这是最简单的方法去使用它的进行各种测试。
Block 环境可在仓库中获取,位于文件夹 UnReal/Environment/Block 中,并且设计为轻量级。这意味着它非常基础,但速度很快。以下是启动和运行Block环境的快速步骤:
通过执行上述步骤设置 AirSim 后,您可以,
请参阅 使用 APIs 和 settings.json供更多选择。
提示:请提前安装好 Anaconda3 和 pip 。
pip install airsim
,该命令安装了囊括 Python API for AirSim 的 Python 包。该包依赖 msgpack 包并且会自动安装 msgpack-rpc-python 包,(可能需要管理员或者 sudo 权限)。python hello_car.py
,便能看到小车根据 Python 文件中编写好的命令自动运行了!Enjoy🎉
Build AirSim on Windows
airsim · PyPI
win10-airsim-Unreal 安装配置教程(踩坑)
本文转载自「FedAI」。点此了解更多。
服务器配置:
数量 | 1 |
---|---|
配置 | 8 core / 16G memory / 500G hard disk |
操作系统 | Version: CentOS Linux release 7 |
用户 | User: app owner:apps |
单机版提供2种部署方式,可以根据实际情况选择:
使用Docker镜像安装FATE(推荐)
在主机中安装FATE
建议使用docker镜像,这样可以大大降低遇到问题的可能性。
主机需要能够访问外部网络,从公共网络中拉取安装包和docker镜像。
依赖docker和docker-compose,docker建议版本为18.09,docker-compose建议版本为1.24.0,您可以使用以下命令验证docker环境:docker --version和docker-compose --version,docker的起停和其他操作请参考docker --help。
执行之前,请检查8080、9360和9380端口是否已被占用。 如果要再次执行,请使用docker命令删除以前的容器和镜像。
请按照以下步骤操作:
#获取安装包
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/docker_standalone-fate-1.5.0_preview.tar.gz
tar -xzvf docker_standalone-fate-1.5.0_preview.tar.gz
#执行部署
cd docker_standalone-fate-1.5.0_preview
bash install_standalone_docker.sh
如果在安装脚本文件时提示权限不足的问题,请使用 sudo -i
进行操作。
测试
CONTAINER_ID=`docker ps -aqf "name=fate_python"`
docker exec -t -i ${CONTAINER_ID} bash
bash ./python/federatedml/test/run_test.sh
如果成功,屏幕显示类似下方的语句:
there are 0 failed test
CONTAINER_ID=`docker ps -aqf "name=fate_python"`
docker exec -t -i ${CONTAINER_ID} bash
python ./examples/toy_example/run_toy_example.py 10000 10000 0
如果成功,屏幕显示类似下方的语句:
success to calculate secure_sum, it is 2000.0
有些用例算法在 examples 文件夹下, 请尝试使用。
您还可以通过浏览器体验算法过程看板,访问:Http://hostip:8080。
检查本地8080、9360、9380端口是否被占用。
netstat -apln|grep 8080
netstat -apln|grep 9360
netstat -apln|grep 9380
下载独立版本的压缩包并解压缩。
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/standalone-fate-master-1.5.0_preview.tar.gz
tar -xzvf standalone-fate-master-1.5.0_preview.tar.gz
进入FATE目录并执行init.sh。
cd standalone-fate-master-1.5.0_preview
sh init.sh init
测试
cd standalone-fate-master-1.5.0_preview
source bin/init_env.sh
bash ./python/federatedml/test/run_test.sh
如果成功,屏幕显示类似下方的语句:
there are 0 failed test
cd standalone-fate-master-1.5.0_preview
source bin/init_env.sh
python ./examples/toy_example/run_toy_example.py 10000 10000 0
如果成功,屏幕显示类似下方的语句:
success to calculate secure_sum, it is 2000.0
有些用例算法在 examples 文件夹下, 请尝试使用。
您还可以通过浏览器体验算法过程看板,访问:Http://hostip:8080。
本文转载自「FedAI」。点此了解更多。
]]>Gridea 是一个静态博客写作客户端,帮助你更容易地构建并管理博客或任何静态站点。
最大的优点就是让你能够像写微博一样轻松地写博客,而不需要太多的顾及代码部分的内容。
本文转载自「Gridea」。点此了解更多。
相信你自己可以搞得定哦,加油写作啦!
Gridea 提供了将博客部署到 GitHub Pages、Coding Pages 和通过 SFTP 的方式上传到自己的服务器的功能。下面将以 GitHub 为例,来讲一下部署流程。
以上,就完成一个静态博客的搭建了,期待你的每一次落笔成文。
Enjoy~
附:社区小伙伴录制的 Gridea 教程
Gridea快速上手-1-前言
Gridea快速上手-3-Gridea与Github的配置
Gridea静态博客最新教程(Coding的部署)
10分钟搭建博客——Gridea
十分简单!目前,你可以将 markdown 文章手动复制到源文件夹中的 posts 文件夹中 (默认是~/Documents/Gridea/posts
),然后打开应用检查文章内容。若文章中有图片,则需额外编辑即可。本次迁移工作最大的工作量就是在封面图的重新匹配上,以及对博客的个性化上。
提示:从 Hexo 导入的文章将抛弃 分类(Categories)信息,因为在 Gridea 中只有 标签(Tag)的概念。
本文转载自「Gridea」。点此了解更多。
]]>随着信息技术的快速发展,硬件设备和数据的广泛利用为人工智能发展提供了广阔的应用空间和广泛的应用条件。但从2014年以来,数据泄漏问题开始得到公众关注,每年都有大量数据隐私泄露事件发生,数据使用的合法性和使用界限开始成为各行业关心的问题。2018年5月25日,欧盟正式生效《通用数据保护条例》(General Data Protection Regulation,GDPR)。中国于2019年4月正式发布《互联网个人信息安全保护指南》、2017年起实施《中华人民共和国网络安全法》和《中华人民共和国民法总则》。法律条例对于人工智能传统的数据处理建模模式形成了极大挑战。在一个需要互联共享的信息共享环境下,如何在符合法律法规的用户数据隐私安全条件下,进行多方数据资源的利用,成为了各企业利用数据时中面临的重要问题。
人工智能领域,往往需要足量数据进行机器学习来产生良好的建模效果。”能否掌握足量优质的数据,决定了人工智能训练效果的优劣。在实际工业环境中,仅仅一家企业难以只利用自身数据推测用户多元化多平台的消费习惯。为了更精准的做出决策,需要充分利用信息资源。市场开始要求大规模数据平台使用多种情况下的最佳训练效果。然而许多企业训练方拥有的数据量不足,规模与质量不完备。数据来源不够,导致机器学习系统效果不理想。不同的网站、研究者、广告商和商业机构想要将彼此的数据汇总或者统一整理进行训练,传统的处理模式之一是将不同源数据整合,形成聚合数据库,虽然聚合数据库能实现对多个独立的数据库进行相互操作,但过程中存在各单元数据库的交互过程,面临着交互过程中的安全风险,无法保证隐私安全的后果。另外,实际情况下,数据源往往分布在企业和个人,相互独立隔阂,形成了一个个阻碍技术发展的“数据孤岛”。
联邦学习的提出是满足隐私保护和信息安全、“数据孤岛问题”的解决方案。联邦学习允许从跨数据所有者分布的数据中构建集合模型,提供了跨企业的数据使用方式和模型构建蓝图,适用于B2B和B2C等业务,可被广泛应用于各种领域,实现各个企业的自有数据不出本地,只通过加密机制下的参数交换,不违反数据隐私法规地建立优化机器学习模型。在保护数据隐私安全,合法合规要求前提下,达成机器学习效果的强化,将人工智能重点从以AI基础算法为中心转移到以保障安全隐私的大数据架构为中心。
2016年,Google AI研究人员首次提出用于训练深度学习网络的联邦学习。谷歌尝试建立数百万安卓设备之间的联邦模型,用于移动设备分散数据训练,解决隐私保护问题。2019年2月,Google发布实现了全球首个产品级的超大规模移动端分布式机器学习系统,能够在数千万部手机的安卓键盘上运行联邦学习算法,谷歌的研究主要侧重于在移动终端上运行的联合平均算法。
多个数据拥有方想要共同训练模型,传统做法是将数据整合到一方进行训练,但是这样无法保证数据隐私和传输过程的安全性。相对于以往的分布式机器学习方式,联邦学习具有以下特征:数据不脱离本地;参与者利用自身拥有的数据训练全局模型;每个参与方都参与学习过程;模型损失可控;训练过程中考虑隐私和安全。参与各方能够在不披露底层数据和底层数据的加密形态的前提下共建模型,使联邦学习成为未来安全多方机器学习的新曙光。
联合方式上,可以将联邦学习分为单方和多方两种方式。单方联邦学习是指从一个实体进行分布式内容抓取和系统管理。模型以联合的方式训练在所有客户端设备中具有相同结构的数据上。大多数情况下每个数据点对于设备或用户唯一。例如,应用程序通过单方联邦学习为个人用户推荐音乐的推荐引擎。多方联邦学习则需要两个或多个组织或特许经营商组成联盟。在其各自的数据集上训练共享模型。例如,多家银行可以培训一种通用的强大欺诈检测模型,而无需相互分享敏感的客户数据。
参与各方的数据结构和参数通常相似但不必相同,根据不同的数据的特征分布形式,如同数据库原理中的数据特征分布状态,联邦学习又分为三种不同处理方式:横向、纵向和迁移。参与方们的数据集具有高度重叠的特征维度,样本重叠较小时,称为横向联邦学习。参与方们的数据集具有高度重叠的样本纬度,特征维度重叠较小时,使用方法称为纵向联邦学习。如果参与方们数据集在样本和特征维度上都没有足够的重叠,则使用联邦迁移学习。
参与方们在参与联邦学习的过程中需要使用工具来进行数据的隐私保护。联邦学习的主要的工具包括安全多方计算,同态加密,私密共享和差分隐私。参与方们可以利用安全多方计算保证信息层面的数据安全。安全多方计算成本较高,为降低数据传输成本,参与方们可能需要在降低对数据安全的要求来提高训练的效率。同态加密能够对所有数据进行加密处理,参与方们接收到的是密文,使攻击者无法推理出原始数据信息,保障数据层面的安全。在实际应用中,为了提高计算效率,参与方们一般采用半同态加密,半同态加密可以使用加法和乘法进行同态加密。差分隐私可以用于参与方本地数据信息安全的保护,通过在参与方各自的原始数据上不断加噪音来减弱任意一方数据对于整体数据的影响。其缺点在于牺牲训练效果,过多的噪音会降低模型训练的效果,参与方们在使用差分隐私时需要在数据安全和准确度上进行取舍。
联邦学习的技术框架建设方面。谷歌首先提出开源的离散数据联邦学习应用框架TensorFlow Federated (TFF)。TensorFlow Federated主要支持利用如今数量众多的移动智能终端设备和边缘端计算设备的计算能力,保证数据不离开本地的同时训练本地机器学习模型,通过Google开发的Federated Averaging 算法,即使在较差的通信环境下,也能实现保密、高效、高质量的模型汇总和迭代流程,且移动端和边缘端用户体验上不做任何牺牲和妥协。目前Google已经将联邦学习应用在移动设备键盘输入预测上。
在学术研究与行业应用上,腾讯发起的中国首家互联网银行——微众银行正在积极探索。在国际人工智能专家、微众银行首席人工智能官杨强教授带领下的AI 团队开源了首个联邦学习“FATE(FederatedAI Technology Enabler)” 工业框架,作为安全计算框架支持联合AI生态系统,该框架可以实现基于同态加密和多方计算的安全计算协议,在信贷风控、客户权益定价、监管科技等领域推出了相应的商用方案。微众银行与瑞士再保险公司达成合作,共同研究“联邦学习”在再保险领域的应用。在杨强教授担任标准制定工作组主席的带领下,微众银行发起“IEEE联邦学习标准项目”,成为国际上首个针对人工智能协同技术框架订立标准的项目,旨在共同制定联邦学习标准形式的具体形式和内容,达成行业合作,共同推动联邦学习在各行业领域的进一步发展。
目前,联邦学习的国际标准化工作正在进行,随着 6月15日IEEE联邦学习基础架构与应用标准工作组的第二次会议在美国洛杉矶的召开。海内外13家来自科技、金融、教育、医疗等不同行业的知名研究机构及企业从多角度探讨联邦学习技术的应用案例,对联邦学习标准草案的制定提出建设性意见,该标准草案预计在一年内出台,意味着将为立法和监管提供更多技术依据。
联邦学习技术作为机器学习和数据结合的推动者,将推动各行业人工智能技术平台的应用发展,目前各企业已经开始在业务方面开展联邦学习在产业方面的技术平台建设工作。
百度基于数据本地和云端隔离技术,采用安全数据融合以及多方联邦学习技术,推出“点石”数据安全融合及应用服务平台。提供安全数据集合、灵活建模、快速服务部署等服务,基于硬件隔离域、多方安全计算的技术能力,支持多场景的数据安全计算。“点石”利用安全方案解决数据打通难与应用成本高等问题。提供减少企业损失的风险识别,帮助企业有效识别在信用卡、贷款、在线支付等场景中的违约、欺诈等潜在风险,帮助企业对销售线索进行甄别与拓展,优化企业营销策略。“点石”的联邦学习应用场景主要是风险识别和营销分析。该平台与清华大学达成合作,利用联邦学习对接政府客户,帮助智慧城市建设。在风控模型建立方面,与狮桥公司合作,协同客户本地训练,结合大数据联合建模平台进行数据融合与分析建模。
金融应用领域方面,平安集团的高科技内核——平安科技公司正在研发建立全球首个面向金融行业的联邦学习平台“蜂巢”。平安科技利用联邦学习技术,设计面向数据强监管的金融业多态多任务学习模型。“蜂巢”能够应用于多方信息的安全协作计算,满足银行和金融机构的风险评估、反洗钱、投顾、投研、信贷、保险和监管等多场景应用需求。减少人力成本和打通数据的成本,提高数据使用在机器学习过程中的转化率。平安科技将推动学界和工业界的积极探索,携手金融行业共同建立“联邦学习+互联网+监督”的联邦大数据平台,打破金融行业孤岛,联合各企业以及政府机构,进一步推动联邦学习在金融产业的快速发展。
物联网(IoT)生态环境中,联邦学习可以用于人工智能模型的分散训练。目前国内多家企业正在致力于研发联邦学习在物联网领域的应用解决方案。
在通信分配应用方面,华为数字算法实验室利用联邦学习原理解决车联网中可靠低延迟通信的联合功率和资源分配问题,在概率排队延迟方面最小化车辆用户的网络功耗。利用联邦学习技术,华为数字算法实验室提出了一种分布式学习机制,车辆用户在道路单位的帮助下能够在本地学习网络范围队列,而不实时共享队列长度估计尾部分布。这种方法能高精度判断学习网络中的车联网队列分布,减少车载队列长度,优化资源配置。
联想在去中心化人工智能和联邦学习的实际应用场景上,专注与硬件技术的结合,从各种来源聚合生成本地模型并允许物联网相互学习。每个边缘设备的数据独立用于学习创建本地模型。本地模型聚合将中央服务器转换为全局模型,再分发返回边缘设备,令所有边缘设备都可以从收集和处理的信息中受益,在不同场景下,利用联邦学习使物联网设备或传感器能够相互学习。联想正在与波兰云数据解决方案公司ByteLAKE合作,开展联邦学习和边缘计算环境系统构建。
在数据隐私保护的研究应用方面,基于多方安全计算技术,腾讯开展AI创新实践,推出“腾讯云数盾”。数盾以数据安全治理为核心,构建了可用于外部攻击防护、数据交换保护、内部防泄露等全流程的数据安全保护方案,用于帮助企业数据安全建设。数盾通过使用匿名化、差分隐私、安全多方计算架构等方式,在数据使用安全的基础上,平衡隐私保护与数据挖掘价值,符合对于数据使用和共享环境中的合规需求。
阿里巴巴于四年前开始研究共享学习技术,研发蚂蚁金服共享学习平台,主要思想和联邦学习相同,基于数据安全和隐私保护,在多个参与方之间通过共享加密数据或加密机制下的参数交换与优化,进行机器学习,作为虚拟的共享模型的产品平台。蚂蚁金服共享学习平台本着数据共享建模方案不泄露用户隐私且符合数据安全保护的原则实现了数据的多方协同和授权共享,得到更准确高效的模型和决策,进一步释放数据价值。
对想要进行联合机器学习的各参与方,联邦学习具有保护隐私和多方本地数据安全的极大优势。避免集中式存储数据,安全合规地从多源不互通的数据中创造新的价值,充分利用各方数据资源,优化机器学习训练结果,学习参与方可以在联合形成协同合作的联邦大数据环境,形成联邦学习生态。联邦学习生态可以视为一个多种数据来源合作产生的,基于联邦学习原理协同规范的,用于联邦学习过程的无共享多方数据集群环境。用户、方案提供商、服务商、运营商以及生态链上游厂商融入到一个大环境,提供优化服务,真正达到联邦学习的资源融合作用。对金融、互联网、通信、零售、交通运输、工业生产等行业提供计算服务支持。我们可以从以下四方面窥探联邦学习的未来。
丰富的数据资源是联邦学习最大的金矿。原本分散在各规模企业的数据,通过联邦学习生态达成,可以发挥其自身作用,有了更好的用武之地。例如在精准营销方面,通过机器学习建模,把顾客群体细分,对每个群体,量体裁衣地采取相应对策。利用整合各方有用资源,构造更好的机器学习效果,以此产生利益价值。利用“联邦学习+人工智能”真正的赋能大数据并反哺个人和企业业务,用数据和科学提升业务效益。
**打破传统企业机构的数据边界,利用联邦学习提升智能化效果。**改变过去商务智能和政府仅仅依靠机构内部数据的局面。协同各企业机构,达成优化合作,降低各机构间的交易摩擦成本和数据风险,提升机器学习的准确性和更新的及时性。在智慧城市、智慧医疗、智慧金融、企业数据联盟等方面提出新的使用方向。
**更了解市场,发现用户需求并将联邦学习产业应用落地。**从市场业务挖掘数据使用场景,找出联邦学习在市场环境中的使用场景及应用范围,结合目前个人和机构的使用需求,利用联邦学习环境,提供丰富的资源,强化机器学习效果,辅助加速各产业智能化。
**达成各行业联手,共建全行业的联邦学习生态。**联邦学习的出现已经开始改变大数据在各行各业的应用方式,联邦大数据生态的构建也离不开学界和工业界的共同探索和推动,使用联邦学习技术的各方应当携手,联合制定数据联邦行业规范,促成多方联邦数据协议,达成标准化、协同化、规范化的联邦学习环境。
在信息流通日益渗透到企业和个人的今天,联邦学习将逐渐成为金融、保险、投资、医疗等众多行业领域实现商业价值和隐私安全保护的最佳途径,其应用将在各行业全面展开,联邦学习的新纪元已经到来。
环境:Linux Ubuntu 16.04 LTS
在英伟达官网下载链接选择电脑显卡以及操作系统,下载合适的显卡驱动文件。
i. 打开编辑配置文件: sudo gedit /etc/modprobe.d/blacklist.conf
ii. 在最后一行添加:blacklist nouveau
iii. 改好后执行命令:sudo update-initramfs -u
iv. 重启使之生效:reboot
重启后按Ctrl+Alt+F1 进入命令行界面
执行命令:lsmod | grep nouveau
禁用X服务:sudo /etc/init.d/lightdm stop
(或者:sudo service lightdm stop
)
给驱动run文件赋予可执行权限:sudo chmod a+x NVIDIA-Linux-x86_64-440.64.run
(此处文件名称根据下载的驱动文件名填写)
安装:sudo ./NVIDIA-Linux-x86_64-440.64.run -no-opengl-files
–no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要
–no-x-check 安装驱动时不检查X服务
–no-nouveau-check 安装驱动时不检查nouveau
后面两个参数可不加。
开启X服务:sudo /etc/init.d/lightdm start
(或者:sudo service lightdm start
)
重启,没有问题,输入命令:nvidia-smi
如果出现了驱动版本就表示安装成功了。
打开终端 cd 进入存放CUDA安装包的文件夹中,依次输入下面的命令:
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt update
sudo apt install cuda
CUDA完成安装之后,还需要添加环境变量,打开终端,输入下面的命令:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
# 如果是64位系统,输入:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 如果是32位系统,输入:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
上述过程完成了整个的CUDA9.0的安装
勾选I Agree To the Terms of the cuDNN Software License Agreement,一定要选择上适用于CUDA 9.0的正确版本!!!!
打开终端 cd 进入存放cuDNN安装包的文件夹中,输入以下命令:
sudo dpkg -i libcudnn7_7.6.5.32-1+cuda9.0_amd64.deb
注意,上述命令中的可能会由于cudnn版本的细微差异而不同,请根据自己下载的cuDNN版本修改命令。之后等待完成cuDNN的安装。
GPU相比于CPU,在运算速度上有很大的优势,这也是本文推荐安装GPU版本的原因。
Tensorflow总共有4中安装方式,在这里,我们使用Google官方推荐的安装方式:Virtualenv,创建一个虚拟Python开发环境。
由于Python 2.7版本已于2020年1月1日终止维护,这里推荐使用Python 3.x版本进行开发。
打开终端
如果使用Python 2.7的版本,输入sudo apt install python-pip python-dev python-virtualenv
如果使用Python 3.x的版本,输入sudo apt install python3-pip python3-dev python-virtualenv
第一步如果选择Python 2.7版本,终端输入:virtualenv --system-site-packages ~/tensorflow
第一步如果选择Python 3.x版本,终端输入:virtualenv --system-site-packages -p python3 ~/tensorflow
注意,~/tensorflow是自己选择的位置并创建的目录,可以自行选择其他的位置和命名。创建完成之后,会在用户文件夹目录下看到多出的tensorflow文件夹
打开终端输入:source ~/tensorflow/bin/activate
命令执行之后会在命令前出现 (tensorflow) 字样,代表虚拟环境已激活,接下来便可以在虚拟环境中进行操作。
保证pip的版本不低于8.1,在虚拟环境中输入:easy_install -U pip
Python 2.7版本:pip install --upgrade tensorflow-gpu
Python 3.x版本:python -m pip install --upgrade tensorflow-gpu
经过这一步骤之后,tensorflow就安装完成了。
如果pip安装速度慢,可参考本博客之前的文章Ubuntu 16.04 更换安装源合集,更换pip源。
有些IDE 会自动检测tensorflow创建的虚拟环境,不必在终端中单独开启或者关闭,比如pycharm等。
打开终端,输入命令
pip install opencv-python
sudo apt install xautomation
pip install numpy
pip install gym
下载Gym-TORCS源码.此处若git clone速度慢,可通过第三方下载软件下载源码zip包,或者参考本博客之前的文章打破Git 操作的速度限制,为git操作添加网络代理。
将gym_torcs/vtorcs-RL-color/src/modules/simu/simuv2/simu.cpp中第64行替换为
if (isnan((float)(car->ctrl->gear)) || isinf(((float)(car->ctrl->gear)))) car->ctrl->gear = 0;
即转换两个数据类型为float,否则,下一步make的时候可能会出现error,安装失败。(此处参考网上教程,为尝试过不修改文件的方法)
打开终端,cd 到 gym_torcs/vtorcs-Rl-color目录,执行以下命令:
sudo apt-get install libglib2.0-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libplib-dev libopenal-dev libalut-dev libxi-dev libxmu-dev libxrender-dev libxrandr-dev libpng12-dev
./configure
make
sudo make install
sudo make datainstall
torcs
至此完成无人驾驶强化学习环境的搭建!
环境:Linux Ubuntu 16.04 LTS
相关:Ubuntu系统下开始使用Python
这里我们以阿里云的apt 源为例,其他apt 源的更换也同理。
找到并备份配置文件sources.list
我们需要对apt源的配置文件进行修改 。进入/etc/apt目录,我们可以看到sources.list文件。
为了保证安全,我们在修改前先把sources.list文件进行备份
$ sudo cp sources.list sources.list.bak
修改配置文件sources.list
安装vim编辑工具
$ sudo apt-get install vim
使用vim编辑sources.list文件
$ sudo vim /etc/apt/sources.list
将文件内容替换为阿里源Ubunt16.04(xenial)版本:
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
$ sudo apt-get update
$ sudo apt-get upgrade
$ mkdir ~/.pip
$ vim ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
保存退出即可。
除了阿里云的源,还可以替换为下面的源,同理:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣:http://pypi.douban.com/simple/