• [技术干货] 华为云GaussDB(for Influx)揭密第八期:GaussDB(for Influx)与开源企业版性能对比
    “你们的数据库性能怎么样?” “能不能满足我们的业务?” “和其他数据库对比性能有优势么?” ...... 客户在使用数据库时常有这样的担心和疑问。 本文从测试方案、测试工具、测试场景、测试结果等方面详细介绍了GaussDB(for Influx)和开源InfluxDB集群在X86架构下的性能测试情况。测试结果显示,GaussDB(for Influx)较企业版InfluxDB集群能提供更高的写入性能、更低的访问延迟以及更高的数据压缩率。 01 测试方案1.1 资源配置服务端配置产品名称规格存储架构GaussDB(for Influx)4U16G 2节点100G集群架构开源企业版InfluxDB4U16G 3节点100G集群架构1.2 测试工具测试工具为开源性能工具TS-benchMark。02 测试设计2.1  测试模型本次测试采用风力发电数据模型,每个风场50个设备,每个设备50个传感器,1个风场1个线程,通过load数据的线程数来控制时间线的大小,通过收集时间的长短来控制数据量。模型每条数据大小约为24字节,具体的类型如下:Timestamp | farm | device |sensor | value2.2  测试数据量测试数据分为两个场景,大数据量和小数据量,具体数据量如下:场景时间线数据量小数据量50004亿大数据量250万GaussDB(for Influx) 150亿 企业版InfluxDB 47亿注:企业版InfluxDB在插入到47亿数据时OOM,以下性能对比都基于此数据量。2.3  测试场景2.3.1  数据写入场景batch_size(每个批次写入的数据量) 固定为50,线程数分别从1、2、4、8、16、32、64、128、256、512 递增;线程数(客户端并发请求的连接数)固定为8, batch_size分别从50、100、150、200、250、300 递增。2.3.2  数据查询场景单线程进行不同语句的查询,并统计其时延信息。第一类查询:所有TAG查询select * from sensor where f='f1' and d='d2' and s='s1' and time>=1514768400000000000 and time<=1514772000000000000第二类查询:TAG+ VALUE查询select * from sensor where f='f1' and s='d2' and value>=3.0 and time>=1514768400000000000 and time<1514854800000000000第三类查询:聚合查询select mean(value) from sensor where f='f1' and s='s1' and time>=1514768400000000000 and time<=1514854800000000000 group by f,d,s,time(1h)第四类查询:或条件查询select * from sensor where f='f1' and (s='s1' or s='s2' or s='s3' or s='s4' or s='s5') and time>=1514768400000000000 and time<=1514769150000000000第五类查询:单个TAG查询select * from sensor where f='f1' and time>=1514768400000000000 and time<=151476915000000000003 测试结果分析3.1  写入吞性能比对在小数据量场景下,GaussDB(for Influx)的写入性能是企业版InfluxDB的13倍左右,在大数据量的场景下可以达到1.8倍左右。3.2 查询性能对比1) 第一类查询(所有TAG查询):无论是大数据量还是小数据量场景下,GaussDB(for Influx)的吞吐量是开源InfluxDB企业版的2倍左右。2) 第二类查询(TAG + VALUE查询):在小数据量场景下,开源InfluxDB企业版性能高于GaussDB(for Influx),GaussDB(for Influx)在大数据量和小数据量场景下性能基本持平。3)第三类查询(聚合查询):GaussDB(for Influx)查询性能明显优于开源InfluxDB企业版,在小数据量场景下是开源版本的14倍,大数据量下也是开源版本的8倍左右。4)第四类查询(或条件查询):GaussDB(for Influx)查询性能在两种场景下比较稳定,开源企业版InfluxDB在两种场景下差异较大;GaussDB(for Influx)在小数据量场景下表现优于开源版,在大数据量场景下低于开源版。5)第五类查询(单个TAG查询):GaussDB(for Influx)查询性能在两种场景下比较稳定,在大数据量场景下低于开源版。3.3  数据压缩率对比在250万时间线场景下,GaussDB(for Influx)导入了151亿条数据,导入前数据大小为337.5G,导入后为49.8G,压缩率为6.8;开源企业版导入了47亿条数据,导入前105G,导入后21.3G,压缩率为4.9。GaussDB(for Influx)压缩率是开源企业版的1.4倍左右。Influx引擎采用LSM tree架构,随着后台compaction的进行,压缩率会进一步提升,当前数据对比是数据刚导入时的结果。04 总结在GaussDB(for Influx)2节点对比开源版3节点场景下,GaussDB(for Influx)给客户带来了更高的写入能力、更稳定的查询能力、更高的压缩率。GaussDB(for Influx)写入能力在小数据量场景下是开源企业版的13倍,在大数据量场景下是开源企业版的1.8倍;查询能力在两种场景下表现稳定,在大部分查询场景下优于开源企业版;在压缩率方面,同样数据模型下,高出开源版本40%。除了以上优势外,GaussDB(for Influx)还在集群化、冷热分级存储、高可用方面也做了深度优化,能更好地满足时序应用的各种场景。05 结束本文作者:华为云数据库创新Lab & 华为云时空数据库团队欢迎加入我们!云数据库创新Lab(成都、北京)简历投递邮箱:xiangyu9@huawei.com华为云时空数据库团队(西安、深圳)简历投递邮箱:yujiandong@huawei.com
  • 【持续更新】GaussDB数据库学院干货汇总
    类别 产品 名称在线课程GaussDB GaussDB实战训练营 华为云数据库GaussDB GaussDB关键技术特性入门 华为云数据库GaussDB介绍 GaussDB新一代关系型数据库技术揭秘 GaussDB 数据存储与访问 GaussDB(for MySQL) 【系列课程】华为GaussDB OLTP数据库高级工程师学习 【系列课程】数据库原理及应用学习 【系列课程】数据库工程师学习路径 RDS for MySQL 7天玩转MySQL基础实战营 RDS for PostgresSQL 7天玩转PostgreSQL基础训练营 GaussDB(for Mongo) MongoDB分布式事务内核源码简介 秒级水平拓展的-GaussDB(for Mongo)架构剖析 GaussDB(for Redis) 当Redis遇见计算存储分离 GaussDB(for Influx) 云原生时代下的时序数据库GaussDB(for Influx) DDS 华为云数据库DDS产品深度赋能 玩转MongoDB从入门到实战 公共 云享读书会《SQL优化核心思想》 端到端安全可信,华为云数据库解决方案最佳实践 华为云数据库架构设计 HCSD实训营数据库技能测评(活动课程) HCSD实训营在线实践(活动课程)CodeLab GaussDB SQL调优之改写SQL消除子查询 SQL调优之建立合适的索引 SQL调优之选择合适的分布列 GaussDB(for MySQL) GaussDB(for MySQL)如何快速创建索引 GaussDB(for MySQL) HTAP只读分析特性详解 RDS for MySQL 通过接口调用方式创建RDS 基于Python搭建云数据库应用 GaussDB(for Redis) 华为云GaussDB(for Redis)与开源Redis集群性能对比 GaussDB(for Influx) GaussDB(for Influx)时序分析平台使用指南 GaussDB(for Cassandra) 华为云GaussDB(for Cassandra)与自建开源Cassandra性能对比 DAS 如何通过SQL模板检查并进行表优化 基于DAS服务的数据**与回滚场景实践 DDS DDS通过SQL优化来提升DDS性能 DDS如何规避mongos路由缓存缺陷 DDS如何通过设置数据分片来提升性能 DDS CPU使用率高的问题排查方法 DRS 实时同步数据加工 PostgreSQL数据库同步 基于DRS服务的MySQL数据库云上迁移实践 公共 【特性指南】分区表查询增强特性用户指南 DDM分库分表实践 - 解决单机数据库困境 DDM查询执行计划介绍 DDM+MySQL扩展来破除业务性能瓶颈沙箱实验 RDS for MySQL 10分钟快速入门RDS 数据库服务实践 DRS 使用DRS实现数据实时同步 MySQL本地数据库迁移 公共 使用CDM将CSV文件迁移至RDS 通过CDM同步数据到MRS Hive 使用Python爬虫抓取图片和文字实验微认证 RDS for MySQL 华为云数据库服务实践 GaussDB(for Mongo) 基于MongoDB使用Java实现图书管理系统 DRS MySQL数据库迁移上云 公共 云数据库性能对比测试 使用Python爬虫抓取图片 openGauss数据库在金融领域的使用实践 基于华为云DevCloud的托马斯商城
  • [其他] 深度学习随机取样与batch大小选择
    随机取样随机取样与全局训练是无关的,因为在全局训练中所有的样本都会被用来估计梯度。而在随机梯度下降和小批量梯度下降中,随机取样是十分重要的。这是为了得到梯度的无偏估计,样本必须是独立同分布的。如果训练过程中的一些样本不是随机从训练集中取出的,模型的参数可能会沿着一个方向偏移太多。以下是两种随机取样的思路:在语音处理任务中,若所有样本都可以被载入内存中,那可以通过对样本索引进行相应的处理抽样就可以达到样本抽样的效果。在语音处理任务中,若无法将所有样本载入内存进行计算,可以采用滚动窗的方法每次加载一块数据进内存,然后再窗内随机取样。batch大小选择在训练过程中都需要从训练样本的一个批量集合中进行梯度计算,而批量块大小的选择同时会影响收敛速度和模型结果。批量块选择的两种常见情况:整个训练集:选择整个训练集进行模型训练是最常见的情形。随机训练集:代表性方法就是随机梯度下降(SGD),每次只需要用一个样本进行梯度的计算和迭代。综合上述两中批量块的选择情况,提出这种方案“小批量”进行训练,迭代速度比整个数据集更快,比随机训练集更容易收敛。在语音识别任务中,前期可以选择较小的批量块,比如64到256个样本,而后期换用较大的批量块,比如1024-8096个样本。学习率从梯度下降算法的角度来说,通过选择合适的学习率,可以使梯度下降法得到更好的性能。学习率,即参数到达最优值过程的速度快慢,当你学习率过大,即下降的快,很容易在某一步跨过最优值,当你学习率过小时,长时间无法收敛。因此,学习率直接决定着学习算法的性能表现。可以根据数据集的大小来选择合适的学习率,当使用平方误差和作为成本函数时,随着数据量的增多,学习率应该被设置为相应更小的值(从梯度下降算法的原理可以分析得出)。另一种方法就是,选择不受数据集大小影响的成本函数-均值平方差函数。一般常用的学习率有0.00001,0.0001,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10。
  • [其他] 机器学习的方法论
       在深度学习中,经常有“end-to-end(端到端)”学习的提法,与之相对应的传统机器学习是“Divide and Conquer(分而治之)”。这些都是什么意思呢?    “end-to-end”(端到端)说的是,输入的是原始数据(始端),然后输出的直接就是最终目标(末端),中间过程不可知,因此也难以知。比如说,基于深度学习的图像识别系统,输入端是图片的像素数据,而输出端直接就是或猫或狗的判定。这个端到端就是:像素-->判定。    再比如说,“end-to-end”的自动驾驶系统,输入的是前置摄像头的视频信号(其实也就是像素),而输出的直接就是控制车辆行驶指令(方向盘的旋转角度)。这个端到端就是:像素-->指令。    就此,有人批评深度学习就是一个黑箱(Black Box)系统,其性能很好,却不知道为何而好,也就是说,缺乏解释性。其实,这是由于深度学习所处的知识象限决定的。从图1可以看出,深度学习,在本质上,属于可统计不可推理的范畴。“可统计”是很容易理解的,就是说,对于同类数据,它具有一定的统计规律,这是一切统计学习的基本假设。那“不可推理”又是什么概念?其实就是“剪不断、理还乱”的非线性状态了。    在哲学上讲,这种非线性状态,是具备了整体性的“复杂系统”,属于复杂性科学范畴。复杂性科学认为,构成复杂系统的各个要素,自成体系,但阡陌纵横,其内部结构难以分割。简单来说,对于复杂系统,1+1≠2,也就是说,一个简单系统,加上另外一个简单系统,其效果绝不是两个系统的简单累加效应,而可能是大于部分之和。因此,我们必须从整体上认识这样的复杂系统。于是,在认知上,就有了从一个系统或状态(end)直接整体变迁到另外一个系统或状态(end)的形态。这就是深度学习背后的方法论。    与之对应的是“Divide and Conquer(分而治之)”,其理念正好相反,在哲学它属于“还原主义(reductionism,或称还原论)”。在这种方法论中,有一种“追本溯源”的蕴意包含其内,即一个系统(或理论)无论多复杂,都可以分解、分解、再分解,直到能够还原到逻辑原点。    在意象上,还原主义就是“1+1=2”,也就是说,一个复杂的系统,都可以由简单的系统简单叠加而成(可以理解为线性系统),如果各个简单系统的问题解决了,那么整体的问题也就得以解决。比如说,很多的经典力学问题,不论形式有多复杂,通过不断的分解和还原,最后都可以通过牛顿的三大定律得以解决。经典机器学习(位于第Ⅱ象限),在哲学上,在某种程度上,就可归属于还原主义。传统的机器学习方式,通常是用人类的先验知识,把原始数据预处理成各种特征(feature),然后对特征进行分类。    然而,这种分类的效果,高度取决于特征选取的好坏。传统的机器学习专家们,把大部分时间都花在如何寻找更加合适的特征上。因此,早期的机器学习专家们非常苦逼,故此,传统的机器学习,其实可以有个更合适的称呼——特征工程(feature engineering)。    但这种苦逼,也是有好处的。这是因为,这些特征是由人找出来的,自然也就为人所能理解,性能好坏,机器学习专家们可以“冷暖自知”,灵活调整。
  • [技术干货] Ubuntu深度学习环境配置
    Ubuntu深度学习环境配置安装组合:Anaconda+PyTorch(CPU版)或PyTorch(GPU版)开源贡献:陈信达,华北电力大学3.1 Anacond安装Anaconda和Python版本是对应的,所以需要选择安装对应Python2.7版本的还是Python3.7版本或其他版本的,根据自己的需要下载合适的安装包。下载链接:https://www.anaconda.com/download/#linux点击下面的64-Bit (x86) Installer (522 MB),下载64位的版本。下载完后的文件名是:Anaconda3-2020.02-Linux-x86_64.sh。cd到Anaconda3-2020.02-Linux-x86_64.sh所在的目录:执行bash Anaconda3-2020.02-Linux-x86_64.sh开始安装:一直按回车直到如下界面,然后输入yes:这里直接回车安装到默认路径,或者在>>>后输入自定义路径等待安装进度条走完,然后出现下面的提示,yes是加入环境变量,no是不加入环境变量,这里我们以输入no为例接下来手动加入环境变量,先cd到~,然后编辑.bashrc文件:sudo vim .bashrc在最下面添加如下几行(注意.后有空格):# 区分anaconda python与系统内置python alias python3="/usr/bin/python3.5" alias python2="/usr/bin/python2.7" . /home/cxd/anaconda3/etc/profile.d/conda.sh然后按esc + : + wq!保存输入source .bashrc来执行刚修改的初始化文档下面输入conda env list来试试环境变量是否设置成功:试试刚刚设置的使用内置python的命令:python2、python3如果到这就结束的话,大家安装包的时候肯定会无比煎熬~这里需要将anaconda换一下源(加入清华源):然后我们创建一个名为pytorch的虚拟环境,发现报了下面的错误:原因是我们没有清除上次安装留下来的源,输入sudo vim .condarc,修改该文件的内容(记得删除default那行):然后输入source .condarc,再次创建虚拟环境:3.2 pytorch cpu版本安装打开pytorch官网:https://pytorch.org/激活刚刚创建的虚拟环境:conda activate pytorch在安装之前先添加下面这个源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch然后输入下面代码:conda install pytorch torchvision cpuonly -c pytorch等到安装好后测试一下是否安装完成:import torch print(torch.__version__)输出如下则安装成功:3.3 pytorch-gpu安装3.3.1 GPU驱动安装• 检测显卡类型执行命令:' ubuntu-drivers devices'•== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 == modalias : pci:v000010DEd00001C8Dsv00001028sd0000086Fbc03sc02i00 vendor : NVIDIA Corporation model : GP107M [GeForce GTX 1050 Mobile] driver : nvidia-driver-390 - distro non-free driver : nvidia-driver-435 - distro non-free driver : nvidia-driver-440 - distro non-free recommended driver : xserver-xorg-video-nouveau - distro free builtin == /sys/devices/pci0000:00/0000:00:14.3 == modalias : pci:v00008086d0000A370sv00008086sd000042A4bc02sc80i00 vendor : Intel Corporation model : Wireless-AC 9560 [Jefferson Peak] manual_install: True driver : backport-iwlwifi-dkms - distro free大家可以看到,这里有个设备是GTX1050。推荐安装驱动是440。• 安装驱动安装所有推荐驱动sudo ubuntu-drivers autoinstall安装一个驱动sudo apt install nvidia-4403.3.2 安装cudacuda安装需要对应合适的显卡驱动。下面是驱动和cuda的版本对应关系•Table 1. CUDA Toolkit and Compatible Driver VersionsCUDA Toolkit Linux x86_64 Driver Version Windows x86_64 Driver VersionCUDA 10.2.89 >= 440.33 >= 441.22CUDA 10.1 (10.1.105 general release, and updates) >= 418.39 >= 418.96CUDA 10.0.130 >= 410.48 >= 411.31CUDA 9.2 (9.2.148 Update 1) >= 396.37 >= 398.26CUDA 9.2 (9.2.88) >= 396.26 >= 397.44CUDA 9.1 (9.1.85) >= 390.46 >= 391.29CUDA 9.0 (9.0.76) >= 384.81 >= 385.54CUDA 8.0 (8.0.61 GA2) >= 375.26 >= 376.51CUDA 8.0 (8.0.44) >= 367.48 >= 369.30CUDA 7.5 (7.5.16) >= 352.31 >= 353.66CUDA 7.0 (7.0.28) >= 346.46 >= 347.62cuda下载链接:http://suo.im/6dY8rLInstaller Type选择第一第二个都可。但是要在获得cuda文件后先检测gcc版本。下面以第一个runfile(local)安装方式为例。• 安装gcclinux一般会自带了gcc,我们先检测一下自己系统的gcc版本gcc --version而cuda的gcc依赖版本在官方文档的安装指南上会给出如果版本和cuda依赖gcc不对应,就安装cuda需要的版本sudo apt-get install gcc-7.0 sudo apt-get install g++-7.0安装完成后需要更换系统gcc版本sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50选择需要的版本•sudo update-alternatives --config gcc选择 路径 优先级 状态------------------------------------------------------------* 0 /usr/bin/gcc-9 50 自动模式 1 /usr/bin/g++-9 50 手动模式 2 /usr/bin/gcc-7 50 手动模式输入前面显示的编号即可。• 安装cuda•sudo sh cuda_你的版本_linux.run• 配置环境变量sudo vim ~/.bashrc将下面的命令复制进去export PATH=/usr/local/cuda-10.2/bin${PATH:+:$PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}检查是否安装成功•nvcc -V3.3.3 安装cudnnhttps://developer.nvidia.com/cudnn 选择对应cuda的版本即可然后将cudnn解压后的include和lib64文件夹复制到cuda中sudo cp cuda/include/cudnn.h /usr/local/cuda-10.2/include #解压后的文件夹名字为cuda-10.2 sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64sudo chmod a+r /usr/local/cuda-10.2/include/cudnn.h /usr/local/cuda-10.2/lib64/libcudnn*3.3.4 安装pytorch-gpuconda安装:# 选择自己对应的cuda版本conda install pytorch torchvision cudatoolkit=10.2pip安装:pip install torch torchvision -i https://pypi.mirrors.ustc.edu.cn/simple
  • [技术干货] **Mac深度学习环境配置**
    Mac深度学习环境配置安装组合:Anaconda+PyTorch(GPU版)开源贡献:马曾欧,伦敦大学2.1 安装AnacondaAnaconda 的安装有两种方式,这里仅介绍一种最直观的- macOS graphical install。https://www.anaconda.com/products/individual里,Anaconda Installers的位置,选择Python 3.7 下方的“64-Bit Graphical Installer (442)”。下载好pkg 安装包后点击进入,按下一步完成安装即可。默认安装地点为~/opt。想用command line install 的,请自行参考:https://docs.anaconda.com/anaconda/install/mac-os/2.2 确认下载情况在Mac 的Terminal 里,输入python --version确保安装的Python 是3.x 版本。在Terminal 输入jupyter notebook弹出网页,即可进入notebook。在网页右上角点击Quit,或返回Terminal,command + c,退出notebook。2.2.1 常见问题如果电脑中下载了多个Anaconda,运行时可能出现冲突。在Terminal 中输入cd ~返回home 目录,输入cat .bash_profile如果只能看到一个Anaconda 版本就没有问题。如果有多个则下载包时有可能造成一定的冲突。用vim、nano 或其他文本编辑器把旧版本Anaconda 的export PATH= ...删除。2.3 虚拟环境和包的下载用conda 去创建虚拟环境和下载对应的包是很简单的一件事。2.3.1 Graphic点击Anaconda-Navigator,可以看到自己下载好的应用程序,左上角“Applications on”应该指向的是“base (root)”,左边点击“Environments”就可以看到自己建立的虚拟环境和对应的包了。点击左下角的Create 即可创建一个新的虚拟环境。输入环境名称和python 的版本,点击create 进行创建。之后在Home 页面,确保左上角指向的是你刚刚创建的环境名,在这个环境下install jupyter notebook,注意原本装的notebook 是在base 里的,不可通用。回到Environments 中,可以看到在此环境中的所有包,左上方选择All,然后输入想要下载的包名然后选中进行下载2.3.2 Command Line用command line 完成以上的操作也很简洁。这次以Pytorch 为例。在Terminal 中输入conda create --name env_name就可以创建一个虚拟环境,叫“env_name”。输入conda env list即可看到创建了的所有虚拟环境,其中打* 的就是当前环境。输入conda activate env_name进入环境conda deactivate退出当前虚拟环境,进入base。2.3.3 下载Pytorch一般情况下Mac 是不支持CUDA 的。进入https://pytorch.org/ 可以看到pytorch 官网显示当前设备应该用的下载语句。此情况,我的是conda install pytorch torchvision -c pytorch复制下来,粘贴到Terminal 中运行就可以开始下载了。下载完成后,在Terminal 输入python3之后import 两个刚下载的包,确认下载完成import torch import torchvision print(torch.__version__) print(torchvision.__version__)如果import 和输出正常,配置就完成了!输入quit()就ok 了。文章来源于Datawhale ,作者Datawhale
  • [其他] Windows系统深度学习环境配置
    1.1 打开Anaconda Prompt1、conda create -n pytorch python=3.7.0:创建名为pytorch的虚拟环境,并为该环境安装python=3.7。2、activate pytorch:激活名为pytorch的环境1.2 确定硬件支持的CUDA版本NVIDIA控制面板-帮助-系统信息-组件2020年5月19日16:46:31,我更新了显卡驱动,看到我的cuda支持11以内的1.3 确定pytorch版本,torchvision版本进入pytorch官网:https://pytorch.org/get-started/locally/因为官方源太慢了,这里使用清华源下载1.4 镜像中下载对应的安装包清华镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/pytorch:torchvision:1.5 本地安装接着第一步,在pytorch环境下进行安装,依次输入如下指令。然后回到虚拟环境所在目录,用conda install anaconda安装环境所需的基础包1.6 测试代码1:••••from future import print_functionimport torchx = torch.rand(5, 3)print(x)输出类似于以下的张量:代码2:••import torchtorch.cuda.is_available()输出:True如果以上两段代码输出无异常,表明环境搭建成功。1.7 遇到的问题• \用下面命令创建虚拟环境报错**•conda create -n py37_torch131 python=3.7【解决方法】https://blog.csdn.net/weixin_42329133/article/details/102640763环境会保存在Anaconda目录下的envs文件夹内• \PackagesNotFoundError: The following packages are not available from current channels\**【解决方法】:https://www.cnblogs.com/hellojiaojiao/p/10790273.html• conda下载太慢问题【解决方案】https://mirror.tuna.tsinghua.edu.cn/help/anaconda/我直呼一声清华NB!• cuda安装cuda历史版本下载:https://developer.nvidia.com/cuda-toolkit-archive要看NVIDIA的组件,自己的CUDA支持哪个版本,我是1060显卡,所以我下的10.0版本的cuda• pytorch安装官网没有我的组合,我满脸问号这里我直接(别忘了先进入刚创建的环境)•conda install pytorch torchvision cudatoolkit=10.0 -c pytorch• jupyter note如何进入虚拟环境python -m ipykernel install --name 虚拟环境名1.打开Anaconda Prompt,输入conda env list 查看现有环境2.输入activate name(name是你想切换的环境)3.conda install ipykernel 安装必要插件4.python -m ipykernel install --name Name 将环境添加到Jyputer中(Name是此环境显示在Jyputer中的名称,可自定义)删除内核jupyter kernelspec remove 内核名称报错[Errono 13][Errno 13] Permission denied: ‘/usr/local/share/jupyter’为此,需要添加–user选项,将配置文件生成在本账户的家目录下。•python -m ipykernel install --user --name py27-caffe-notebook至此,添加kernel完成。查看已有的kernel:•jupyter kernelspec list删除已有的kernel•jupyter kernelspec remove kernelname以上的命令删除仅仅是配置文件,并没有卸载相应虚拟环境的ipykernel,因此若要再次安装相应python虚拟环境的kernel,只需激活虚拟环境,然后•python -m ipykernel install --name kernelname• conda安装一半总失败把文件下载到本地,进入该文件的目录,然后用命令•conda install --offline 包名文章来源于Datawhale ,作者Datawhale
  • [技术干货] 将大核卷积分三步,清华胡事民、南开程明明团队全新视觉骨干VAN,超越SOTA ViT和CNN
    作为基础特征提取器,视觉骨干(vision backbone)是计算机视觉领域的基础研究课题。得益于卓越的特征提取性能,CNN 成为过去十年中不可或缺的研究课题。在 AlexNet 重新开启深度学习十年之后,通过使用更深的网络、更高效的架构、更强的多尺度能力,社区已取得多项突破以获得更强大的视觉骨干和注意力机制。由于平移不变性和共享滑动窗口策略,CNN 对于具有任意大小输入的各种视觉任务是有效的。更先进的视觉骨干网络通常会在各种任务中带来显著性能提升,包括图像分类、对象检测、语义分割和姿势估计。同时,选择性注意力是处理视觉中复杂搜索组合的重要机制。注意力机制可以看作是基于输入特征的自适应选择过程。自从提出完全注意力网络以来,自注意力模型(即 Transformer)迅速成为了 NLP 领域的主导架构。近年来,Dosovitskiy 等人提出 ViT,它将 transformer 骨干引入计算机视觉,并在图像分类任务上优于 CNN。得益于强大的建模能力,基于 transformer 的视觉骨干迅速占领了各种任务的排行榜,包括对象检测和语义分割等。尽管自注意力机制最初是为 NLP 任务而设计的,但近来已经席卷了计算机视觉领域。然而,图像的 2D 特性为在计算机视觉中应用自注意力带来了三个挑战:将图像视为一维序列会忽略它们的二维结构;二次复杂度对于高分辨率图像来说太昂贵了;只捕捉空间适应性而忽略通道适应性。近日,来自清华大学胡事民团队和南开大学程明明团队提出了一种新型大核注意力(large kernel attention,LKA)模块,在避免上述问题的同时实现了自注意力中的自适应和长距离相关性。该研究还进一步提出了一种基于 LKA 的新型神经网络,命名为视觉注意力网络(VAN)。在图像分类、目标检测、语义分割、实例分割等广泛的实验中,VAN 的性能优于 SOTA 视觉 transformer 和卷积神经网络。论文一作为清华大学计算机系博士生国孟昊,主要研究方向为计算机视觉、计算机图形学、深度学习。他也是计图的开发者之一,曾在国际会议 / 期刊 ICLR/IPMI/CVMJ 上发表论文。胡事民,清华大学计算机科学与技术系教授,主要从事计算机图形学、智能信息处理和系统软件等方面的研究。研制并开源了第一个我国高校自主的深度学习框架——计图(Jittor),计图是一个完全动态编译(Just-in-time),基于元算子融合和统一计算图的深度学习框架。计图支持 30 多种的骨干网络,并且开源了多个模型库:对抗生成网络、图像语义分割、检测与实例分割、点云分类、可微渲染等。程明明,南开大学教授,计算机系主任,他的主要研究方向是计算机视觉和计算机图形学,他发表的论文谷歌引用 2 万余次,单篇最高引用 4000 余次。方法大核注意力注意力机制可以看作是一个自适应选择的过程,它可以根据输入特征选择鉴别特征并自动忽略噪声响应。注意力机制的关键步骤是生成注意力图,指出不同点的重要性。因此需要了解各点之间的关系。有两种众所周知的方法可以在不同点之间建立关系。第一种是采用自注意力机制来捕获长距离依赖。第二种是使用大核卷积来建立相关性并产生注意力图,这种方式还是有明显的弊端的,大核卷积带来了大量的计算开销和参数。为了克服上述缺点并利用自注意力和大核卷积的优点,该研究提出分解大核卷积操作来捕获长距离关系。如下图 2 所示,大核卷积可以分为三个部分:空间局部卷积(depth-wise 卷积)、空间长距离卷积(depth-wise 空洞卷积)和通道卷积(1×1 卷积)。视觉注意力网络(VAN) VAN 具有简单的层次结构,包括四个阶段,并逐步降低输出空间分辨率,即 H/4 × W/4 、H/8 × W/8 、H/16 × W/16 和 H /32 × W/32 。其中,H 和 W 代表输入图像的高度和宽度。随着分辨率的降低,输出通道的数量也在增加。输出通道 C_i 的变化如.该研究首先对输入进行下采样,并使用步幅数来控制下采样率。该研究通过定量和定性实验来证明 VAN 的有效性。其中,在 ImageNet-1K 图像分类数据集、COCO 目标检测数据集和 ADE20K 语义分割数据集上进行了定量实验,并在 ImageNet 验证集上使用 Grad-CAM 来可视化类激活映射(CAM)。该研究首先用消融实验证明 LKA 的每个组成部分都是至关重要的。为了快速获得实验结果,该研究选择 VAN-Tiny 作为基线模型通过以上分析,研究者发现 LKA 可以利用局部信息,捕捉长距离依赖,在通道和空间维度上都具有适应性。此外,实验结果证明 LKA 的所有组成部分都有助于完成识别任务。虽然标准卷积可以充分利用局部语境信息,但它忽略了长距离依赖和适应性。而自注意力虽然可以捕获长距离依赖,且在空间维度上具有适应性,但它忽略了局部信息和在通道维度上的适应性。研究者还将 VAN 与现有方法进行了比较,包括 MLP、CNN 和 ViT,结果如下表 5 所示。在相似的参数和计算成本下,VAN 优于常见的 CNN(ResNet、ResNeXt、ConvNeXt 等)、ViT(DeiT、PVT 和 Swin-Transformer 等)和 MLP(MLP -Mixer、ResMLP、gMLP 等)。可视化类激活映射(CAM)是一种可视化鉴别区域(注意力图)的流行工具。该研究采用 Grad-CAM 来可视化 ImageNet 验证集上由 VAN-Base 模型生成的注意力。下图 4 的结果表明,VAN-Base 可以清晰地聚焦在目标对象上,可视化直观地证明了 VAN 的有效性。
  • [其他] 深度学习神经网络
    深度神经网络是由多个单层非线性网络叠加而成的,常见的单层网络按照编码解码情况分为3类:只包含编码器部分、只包含解码器部分、既有编码器部分也有解码器部分。编码器提供从输入到隐含特征空间的自底向上的映射,解码器以重建结果尽可能接近原始输入为目标将隐含特征映射到输入空间。 人的视觉系统对信息的处理是分级的。从低级的提取边缘特征到形状(或者目标等),再到更高层的目标、目标的行为等,即底层特征组合成了高层特征,由低到高的特征表示越来越抽象。深度学习借鉴的这个过程就是建模的过程。 深度神经网络可以分为3类,前馈深度网络(feed-forwarddeep networks, FFDN),由多个编码器层叠加而成,如多层感知机(multi-layer perceptrons, MLP)、卷积神经网络(convolutionalneural networks, CNN)等。反馈深度网络(feed-back deep networks, FBDN),由多个解码器层叠加而成,如反卷积网络(deconvolutionalnetworks, DN)、层次稀疏编码网络(hierarchical sparse coding, HSC)等。双向深度网络(bi-directionaldeep networks, BDDN),通过叠加多个编码器层和解码器层构成(每层可能是单独的编码过程或解码过程,也可能既包含编码过程也包含解码过程),如深度玻尔兹曼机(deep Boltzmann machines, DBM)、深度信念网络(deep beliefnetworks, DBN)、栈式自编码器(stacked auto-encoders, SAE)等。深度神经网络是由多个单层非线性网络叠加而成的,常见的单层网络按照编码解码情况分为3类:只包含编码器部分、只包含解码器部分、既有编码器部分也有解码器部分。编码器提供从输入到隐含特征空间的自底向上的映射,解码器以重建结果尽可能接近原始输入为目标将隐含特征映射到输入空间。
  • [其他] 机器学习的几种常见算法
    决策树算法决策树及其变种是一类将输入空间分成不同的区域,每个区域有独立参数的算法。决策树算法充分利用了树形模型,根节点到一个叶子节点是一条分类的路径规则,每个叶子节点象征一个判断类别。先将样本分成不同的子集,再进行分割递推,直至每个子集得到同类型的样本,从根节点开始测试,到子树再到叶子节点,即可得出预测类别。此方法的特点是结构简单、处理数据效率较高。朴素贝叶斯算法朴素贝叶斯算法是一种分类算法。它不是单一算法,而是一系列算法,它们都有一个共同的原则,即被分类的每个特征都与任何其他特征的值无关。朴素贝叶斯分类器认为这些“特征”中的每一个都独立地贡献概率,而不管特征之间的任何相关性。然而,特征并不总是独立的,这通常被视为朴素贝叶斯算法的缺点。简而言之,朴素贝叶斯算法允许我们使用概率给出一组特征来预测一个类。与其他常见的分类方法相比,朴素贝叶斯算法需要的训练很少。在进行预测之前必须完成的唯一工作是找到特征的个体概率分布的参数,这通常可以快速且确定地完成。这意味着即使对于高维数据点或大量数据点,朴素贝叶斯分类器也可以表现良好。 支持向量机算法基本思想可概括如下:首先,要利用一种变换将空间高维化,当然这种变换是非线性的,然后,在新的复杂空间取最优线性分类表面[8]。由此种方式获得的分类函数在形式上类似于神经网络算法。支持向量机是统计学习领域中一个代表性算法,但它与传统方式的思维方法很不同,输入空间、提高维度从而将问题简短化,使问题归结为线性可分的经典解问题。支持向量机应用于垃圾邮件识别,人脸识别等多种分类问题。 随机森林算法控制数据树生成的方式有多种,根据前人的经验,大多数时候更倾向选择分裂属性和剪枝,但这并不能解决所有问题,偶尔会遇到噪声或分裂属性过多的问题。基于这种情况,总结每次的结果可以得到袋外数据的估计误差,将它和测试样本的估计误差相结合可以评估组合树学习器的拟合及预测精度。此方法的优点有很多,可以产生高精度的分类器,并能够处理大量的变数,也可以平衡分类资料集之间的误差。人工神经网络算法人工神经网络与神经元组成的异常复杂的网络此大体相似,是个体单元互相连接而成,每个单元有数值量的输入和输出,形式可以为实数或线性组合函数。它先要以一种学习准则去学习,然后才能进行工作。当网络判断错误时,通过学习使其减少犯同样错误的可能性。此方法有很强的泛化能力和非线性映射能力,可以对信息量少的系统进行模型处理。从功能模拟角度看具有并行性,且传递信息速度极快。Boosting与Bagging算法Boosting是种通用的增强基础算法性能的回归分析算法。不需构造一个高精度的回归分析,只需一个粗糙的基础算法即可,再反复调整基础算法就可以得到较好的组合回归模型。它可以将弱学习算法提高为强学习算法,可以应用到其它基础回归算法,如线性回归、神经网络等,来提高精度。Bagging和前一种算法大体相似但又略有差别,主要想法是给出已知的弱学习算法和训练集,它需要经过多轮的计算,才可以得到预测函数列,最后采用投票方式对示例进行判别。 关联规则算法关联规则是用规则去描述两个变量或多个变量之间的关系,是客观反映数据本身性质的方法。它是机器学习的一大类任务,可分为两个阶段,先从资料集中找到高频项目组,再去研究它们的关联规则。其得到的分析结果即是对变量间规律的总结。 EM(期望最大化)算法在进行机器学习的过程中需要用到极大似然估计等参数估计方法,在有潜在变量的情况下,通常选择EM算法,不是直接对函数对象进行极大估计,而是添加一些数据进行简化计算,再进行极大化模拟。它是对本身受限制或比较难直接处理的数据的极大似然估计算法。深度学习深度学习(DL,Deep Learning)是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI,Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。深度学习在搜索技术、数据挖掘、机器学习、机器翻译、自然语言处理、多媒体学习、语音、推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。
  • [其他] 深度学习之批量算法
    机器学习算法和一般优化算法不同的一点是,机器学习算法的目标函数通常可以分解为训练样本上的求和。机器学习中的优化算法在计算参数的每一次更新时通常仅使用整个代价函数中一部分项来估计代价函数的期望值。另一个促使我们从小数目样本中获得梯度的统计估计的动机是训练集的冗余。在最坏的情况下,训练集中所有的 m 个样本都是彼此相同的拷贝。基于采样的梯度估计可以使用单个样本计算出正确的梯度,而比原来的做法少花了 m 倍时间。实践中,我们不太可能真的遇到这种最坏情况,但我们可能会发现大量样本都对梯度做出了非常相似的贡献。使用整个训练集的优化算法被称为批量(batch)或确定性(deterministic)梯度算法,因为它们会在一个大批量中同时处理所有样本。这个术语可能有点令人困惑,因为这个词 “批量’’ 也经常被用来描述小批量随机梯度下降算法中用到的小批量样本。通常,术语 “批量梯度下降’’ 指使用全部训练集,而术语 “批量’’ 单独出现时指一组样本。例如,我们普遍使用术语 “批量大小’’ 表示小批量的大小。每次只使用单个样本的优化算法有时被称为随机(stochastic)或者在线(on-line)算法。术语 “在线’’ 通常是指从连续产生样本的数据流中抽取样本的情况,而不是从一个固定大小的训练集中遍历多次采样的情况。
  • [其他] 深度学习之代理损失函数
    即使对于线性分类器而言,精确地最小化 0 − 1 损失通常是不可解的(复杂度是输入维数的指数级别)(Marcotte and Savard, 1992)。在这种情况下,我们通常会优化代理损失函数(surrogate loss function)。代理损失函数作为原目标的代理,还具备一些优点。例如,正确类别的负对数似然通常用作 0 − 1 损失的替代。负对数似然允许模型估计给定样本的类别的条件概率,如果该模型效果好,那么它能够输出期望最小分类误差所对应的类别。在某些情况下,代理损失函数比原函数学到的更多。例如,使用对数似然替代函数时,在训练集上的 0 − 1 损失达到 0 之后,测试集上的 0 − 1 损失还能持续下降很长一段时间。这是因为即使 0 − 1 损失期望是零时,我们还能拉开不同类别的距离以改进分类器的鲁棒性,获得一个更强壮的、更值得信赖的分类器,从而,相对于简单地最小化训练集上的平均 0 − 1 损失,它能够从训练数据中抽取更多信息。一般的优化和我们用于训练算法的优化有一个重要不同:训练算法通常不会停止在局部极小点。反之,机器学习通常优化代理损失函数,但是在基于提前终止(第 7.8 节)的收敛条件满足时停止。通常,提前终止使用真实潜在损失函数,如验证集上的 0 − 1 损失,并设计为在过拟合发生之前终止。与纯优化不同的是,提前终止时代理损失函数仍然有较大的导数,而纯优化终止时导数较小。
  • [其他] 深度学习之经验风险
    机器学习算法的目标是降低式 (8.2) 所示的期望泛化误差。这个数据量被称为风险(risk)。在这里,我们强调该期望取自真实的潜在分布 pdata。如果我们知道了真实分布 pdata(x, y),那么最小化风险变成了一个可以被优化算法解决的优化问题。然而,我们遇到的机器学习问题,通常是不知道 pdata(x, y),只知道训练集中的样本。将机器学习问题转化回一个优化问题的最简单方法是最小化训练集上的期望损失。这意味着用训练集上的经验分布 pˆ(x, y) 替代真实分布 p(x, y)。现在,我们将最小化经验风险(empirical risk):基于最小化这种平均训练误差的训练过程被称为经验风险最小化(empirical risk minimization)。在这种情况下,机器学习仍然和传统的直接优化很相似。我们并不直接最优化风险,而是最优化经验风险,希望也能够很大地降低风险。一系列不同的理论构造了一些条件,使得在这些条件下真实风险的期望可以下降不同的量。然而,经验风险最小化很容易导致过拟合。高容量的模型会简单地记住训练集。在很多情况下,经验风险最小化并非真的可行。最有效的现代优化算法是基于梯度下降的,但是很多有用的损失函数,如 0 − 1 损失,没有有效的导数(导数要么为零,要么处处未定义)。这两个问题说明,在深度学习中我们很少使用经验风险最小化。反之,我们会使用一个稍有不同的方法,我们真正优化的目标会更加不同于我们希望优化的目标。
  • [其他] 深度学习之双反向传播
    正切传播也涉及到双反向传播(Drucker and LeCun, 1992) 和对抗训练(Szegedy et al., 2014a; Goodfellow et al., 2014b)。双反向传播正则化使Jacobian矩阵偏小,而对抗训练找到原输入附近的点,训练模型在这些点上产生与原来输入相同的输出。正切传播和手动指定转换的数据集增强都要求模型在输入变化的某些特定的方向上保持不变。双反向传播和对抗训练都要求模型对输入所有方向中的变化(只要该变化较小)都应当保持不变。正如数据集增强是正切传播非无限小的版本,对抗训练是双反向传播非无限小的版本。流形正切分类器 (Rifai et al., 2011d) 无需知道切线向量的先验。我们将在第十四章看到,自编码器可以估算流形的切向量。流形正切分类器使用这种技术来避免用户指定切向量。这些估计的切向量不仅对图像经典几何变换(如转化、旋转和缩放)保持不变,还必须掌握对特定对象(如移动身体的部分)保持不变的因素。因此根据流形正切分类器提出的算法相当简单:(1)使用自编码器通过无监督学习来学习流形的结构,以及(2)如正切传播(式 (7.67) )一样使用这些切面正则化神经网络分类器。
  • [其他] 深度学习之正切传播
    正则化项当然可以通过适当的超参数缩放,并且对于大多数神经网络,我们需要对许多输出求和 (此处为描述简单,f(x) 为唯一输出)。与切面距离算法一样,我们根据切向量推导先验,通常从变换(如平移、旋转和缩放图像)的效果获得形式知识。正切传播不仅用于监督学习(Simard et al., 1992),还在强化学习(Thrun, 1995)中有所应用。正切传播与数据集增强密切相关。在这两种情况下,该算法的用户通过指定一组不改变网络输出的转换,编码其先验知识。不同的是在数据集增强的情况下,网络显式地训练正确分类这些施加大量变换后产生的不同输入。正切传播不需要显式访问一个新的输入点。取而代之,它解析地对模型正则化从而在指定转换的方向抵抗扰动。虽然这种解析方法是聪明优雅的,但是它有两个主要的缺点。首先,模型的正则化只能抵抗无穷小的扰动。显式的数据集增强能抵抗较大的扰动。其次,我们很难在基于整流线性单元的模型上使用无限小的方法。这些模型只能通过关闭单元或缩小它们的权重才能缩小它们的导数。它们不能像sigmoid或tanh单元一样通过较大权重在高值处饱和以收缩导数。数据集增强在整流线性单元上工作得很好,因为不同的整流单元会在每一个原始输入的不同转换版本上被激活。