Fu's Workshop


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

ubuntu服务器配置(tensorflow+cuda+cudnn+显卡驱动)

发表于 2019年07月26

服务器

我们组有两台服务器一直在某个小房间里吃灰,光靠工作站里的两块1080Ti算力确实不够。某天和IT一起把线接好了可以启动了,但是一看开发环境还是两年多前的,各种软件版本都比较旧了。
GPU
两块Tesla P100在里面积了不少灰,曾经想把他拆下来装在台式机上后来发现台式机电源不是全模组的根本没那个供电的接口,还是放回去吧。

GPU Compute Capability
Tesla P100 6.0
GeForce GTX 1080 Ti 6.1

Retrieved from https://developer.nvidia.com/cuda-gpus

三四万一张的P100计算能力怎么还没有1080Ti好使呢?这个计算能力应该只是在深度学习领域。Tesla系列的专业显卡相比Geforce显卡拥有更高的计算精度,对于航空航天、药物研发等领域提供双精度(FP64)进行更加精准的计算。Tesla的显存颗粒更贵,支持高精度计算不会在读写存储时出现误差。
建议立刻更新到Quadro RTX 8000或者Tesla T4(没funding)

环境

显卡驱动

  1. 禁用nouveau驱动
    Ubuntu系统集成的显卡驱动程序是nouveau,我们需要先将nouveau从linux内核卸载掉才能安装NVIDIA官方驱动。我们的服务器是纯命令行,直接执行最后一步即可。
    (1) 修改blacklist.conf 文件属性blacklist.conf
    查看属性
    • ll /etc/modprobe.d/blacklist.conf
    修改属性
    • sudo chmod 666 /etc/modprobe.d/blacklist.conf
    用vi编辑器打开
    • sudo vi /etc/modprobe.d/blacklist.conf
    • 在文件末尾添加如下几行:
    blacklist vga16fb
    blacklist nouveau
    blacklist rivafb
    blacklist rivatv
    blacklist nvidiafb
    (2)修改并保存文件后,记得把文件属性复原:
    • sudo chmod 644 /etc/modprobe.d/blacklist.conf
    更新一下内核
    • sudo update-initramfs -u
    修改后需要重启系统
    • reboot (重启)
    重启系统确认nouveau是否已经被屏蔽掉,使用lsmod命令查看,lsmod命令用于显示已经加载到内核中的模块的状态信息
    • lsmod | grep nouveau
    若已屏蔽没有任何信息
  2. 手动安装驱动
    提前载nvidia官网上下好了对应版本的驱动,直接用jupyter notebook传到服务器上就可以。
    • 进入nvidia官网 https://www.geforce.cn/drivers
    下载对应显卡的驱动程序,下载后的文件格式为run。
    • 删除原有的NVIDIA驱动程序(若没有安装忽略)
    • sudo apt-get remove –purge nvidia*
    • 进入命令行桌面
    给驱动文件增加可执行权限
    • sudo chmod a+x NVIDIA-Linux-x86_64-418.74.run(cd到文件所在文件夹。)
    安装
    • sudo sh ./NVIDIA-Linux-x86_64-418.74.run.run –no-opengl-files
  3. 检查
    输入nvidia-smi即可检查驱动是否安装成功。
    GPU

安装CUDA

  1. 进入官网下载对应版本(https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal)
    2.运行指令需要cd到包含该文件的文件夹目录下
    根据官网提示指令安装即可
    • sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.168-418.67_1.0-1_amd64.deb
    • sudo apt-key add /var/cuda-repo-ubuntu1804-10-1-local-10.1.168/7fa2af80.pub
    • sudo apt-get update
    • sudo apt-get install cuda

安装cuDnn

  1. 进入官网注册并下载对应的cudnn版本。(https://developer.nvidia.com/rdp/cudnn-download)
  2. 下载完成后解压文件
    tar -zxvf cudnn-10.1-linux-x64-v7.5.1.10.tgz
  3. 解压完成将相应的文件拷贝到对应的CUDA目录下即可(要cd到含cudnn文件的目录下)
    • sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
    • sudo cp cuda/lib64/libcudnn /usr/local/cuda/lib64/
    • sudo chmod a+r /usr/local/cuda/include/cudnn.h
    • sudo chmod a+r /usr/local/cuda/lib64/libcudnn
  4. 编辑环境变量
    • sudo gedit ~/.bashrc
    将cuda的环境变量加到打开的文件最后
    • export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64”
    • export CUDA_HOME=/usr/local/cuda
    • export PATH=“CUDAHOME/bin:PATH”
    保存后,终端输入
    • source ~/.bashrc

SNKRS API变量解析

发表于 2019年07月14 | 分类于 SnkrsMonitor

引言

  想做这个项目的原因是因为之前买的snkrs bot附带的Discord监控到期了,不能再提供各种球鞋上新监控。刚好有朋友在做球鞋定制和公众号,未来是希望把Discord和微信小程序集成在公众号下。第一步选择先做Discord端,考虑到Discord只要把后端和Discord Bot完成就行,刚好也能先熟悉一下Nike这个接口返回的各种信息。但是Discord因为某些原因被墙了,中国的开发者很少,花了很多时间研究国外开发者写的文档,进度还是比较理想的。希望暑假后能尽快开始微信小程序的开发,这才是重点!

SNKRS API

https://api.nike.com/snkrs/content/v1/?country=CN&language=zh-Hans&orderBy=lastUpdated&offset=0
URL其实比较容易拿到,用Wireshark对手机访问SNKRS APP时进行抓包操作就可以。当offset=0时,API会返回第1-50双球鞋的数据,offset=50时,API会返回第51-100双球鞋的数据,以此类推。通过totalRecords可以看到中国区SNKRS上一共有1468双球鞋。

1
{"country":"CN","locale":"zh-Hans_CN","channel":"snkrs","totalRecords":1468,"threads":[{"id":"50307c93-04ef-4720-a5ba-d65f53595d5e","threadId":"50307c93-04ef-4720-a5ba-d65f53595d5e","interestId":"5c94b7ea-2a8a-3c70-97a1-e394f65c77f8","name":"M2K Tekno","lastUpdatedDate":"2019-07-14T04:30:25.997000","lastUpdatedTime":"2019-07-14T04:30:25.997000","publishedDate":"2019-06-11T02:02:43.000000","restricted":false,"feed":"d879aa85-698c-41a1-b066-a8ecdf6b8a9c","title":"Electric Volt","subtitle":"M2K Tekno","seoSlug":"m2k-tekno-electric-volt","seoTitle":"Nike M2K Tekno 'Electric Volt' 发布日期","seoDescription":"浏览并选购 Nike M2K Tekno 'Electric Volt'。抢先了解运动鞋发布新动态。","tags":["SPORTSWEAR","M2K TEKNO GEL","VOLT"],"imageUrl":"https://c.static-nike.com/a/images/t_prod_ss/w_750,c_limit/itzc9whni67vdgvffry5/nike-m2k-tekno-electric-volt-release-date.jpg","squareImageUrl":"https://c.static-nike.com/a/images/t_prod_ss/w_750,c_limit/itzc9whni67vdgvffry5/nike-m2k-tekno-electric-volt-release-date.jpg","portraitImageUrl":"https://c.static-nike.com/a/images/t_prod_ps/w_750,c_limit/itzc9whni67vdgvffry5/nike-m2k-tekno-electric-volt-release-date.jpg","relations":[{"name":"RELATED","threads":["295a2e30-e337-4d16-a7dc-6ed37efdf6cb","54b800b9-2457-4f2d-973e-0f77502cb19f"]}],"product":{"id":"a13e8a5d-eed0-5a05-bac7-96913b8528eb","interestId":"5c94b7ea-2a8a-3c70-97a1-e394f65c77f8","style":"CI5749","colorCode":"777","globalPid":"12697014","title":"Nike M2K Tekno","subtitle":"男子运动鞋","imageUrl":"https://secure-images.nike.com/is/image/DotCom/CI5749_777","genders":["MEN"],"quantityLimit":10,"merchStatus":"ACTIVE","colorDescription":"荧光黄/荧光黄/荧光黄","available":true,"publishType":"FLOW","productType":"FOOTWEAR","upcoming":true,"price":{"msrp":799,"fullRetailPrice":799,"currentRetailPrice":799,"onSale":false},"startSellDate":"2019-06-12T01:00:00.000000","skus":[{"id":"af4e2d70-66b7-5b8f-b1cd-6f25118412ec","localizedSize":"38.5","localizedSizePrefix":null,"nikeSize":"6","available":false},{"id":"a6198452-cea8-52b1-b4e8-9b7330ce1738","localizedSize":"39","localizedSizePrefix":null,"nikeSize":"6.5","available":false},{"id":"0ffd3b93-6f33-56c4-9150-e8399d48a925","localizedSize":"40","localizedSizePrefix":null,"nikeSize":"7","available":true},{"id":"2288c661-37d8-58d2-9420-073e84d94d42","localizedSize":"40.5","localizedSizePrefix":null,"nikeSize":"7.5","available":true},{"id":"61a76fb0-9f4b-5415-831d-79a7d95aacd0","localizedSize":"41","localizedSizePrefix":null,"nikeSize":"8","available":true},{"id":"ce9e61be-1a77-5612-9da5-d3d7c7e1b474","localizedSize":"42","localizedSizePrefix":null,"nikeSize":"8.5","available":false},{"id":"05d73ea3-ba82-5d5e-8272-c3c855f4eee0","localizedSize":"42.5","localizedSizePrefix":null,"nikeSize":"9","available":true},{"id":"d14e0a6b-2e5a-5950-a616-19354ae727d0","localizedSize":"43","localizedSizePrefix":null,"nikeSize":"9.5","available":true},{"id":"509c830c-d527-5836-9047-998a504e044e","localizedSize":"44","localizedSizePrefix":null,"nikeSize":"10","available":true},{"id":"1949e1fb-c5d5-503b-9d57-13a1b4722c10","localizedSize":"44.5","localizedSizePrefix":null,"nikeSize":"10.5","available":true},{"id":"d47d9cf2-08d7-5d8a-8621-924fae3bc22a","localizedSize":"45","localizedSizePrefix":null,"nikeSize":"11","available":true},{"id":"9f7ddf99-b7b8-5768-9311-7aed805526e9","localizedSize":"46","localizedSizePrefix":null,"nikeSize":"12","available":true},{"id":"9ea19342-cf46-50cd-a9f9-5dcbb45cd2fa","localizedSize":"47.5","localizedSizePrefix":null,"nikeSize":"13","available":false}],"expireDate":"3000-01-01T20:00:00.000000"}

变量解析

country: CN 中国区
totalRecords: 1468 SNKRS APP中记录总量
threads: 球鞋的所有信息,一个很长的list,中间存储的是dict。
以第一双鞋为例:
Fig.1AJ13
是一双AJ13,这双鞋在threads中的dict中有一些重要的信息:

  1. id
    API中标记一双球鞋的编号,主键
  2. name
    球鞋名称
  3. restricted
    是否受限,有些新球鞋是锁住的
  4. imageUrl
    球鞋图片,Discord中推送会用到
  5. selectionEngine
    LEO和DAN,2分钟和15分钟抽签模式,现在已经没有先到先得的FLOW模式了
  6. skus
    尺码

Hello World

发表于 2019年06月26 | 分类于 杂谈

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

一个面试问题(字节跳动)

发表于 2019年04月14

问题

如果现在有十三个特征,把其中一个特征复制了再加进去变成第十四个特征,对权重有什么影响?

实验

面试结束忘记问答案了,自己做了个实验看不出任何规律。
在Dataframe中复制一列已有的特征

1
data_train['ByteDance'] = data_train['avgprice']

结果1
画出特征权重直方图

1
xgb.plot_importance(model)

结果2

结果3

???

Introduction to XGboost

发表于 2019年04月11

实习的时候主管布置的任务:
Pls. help to prepare some material to us a training in your area.

  1. AI in picture recognition.
  2. Model algorithm use case in different area.
    至今还没机会讲,就当帮自己从底层梳理了一遍XGboost原理。

项目实训-利用LSTM进行房价走势预测

发表于 2019年04月10

LSTM网络

Long short-term memory,即LSTM。在传统的RNN中,所有的RNN都具有一种重复神经网络模块的链接形式,例如一个tanh层。
Fig1.RNN
LSTM的重复模块有一个不同的结构。
Fig2.LSTM

机器学习知识点总结

发表于 2019年04月03

机器学习知识点总结

整理了一些机器学习的知识点,在公司用TexStudio写的,持续更新中。
如果pdf无法显示请打开Google Drive的分享链接。

项目实训-利用XGboost进行新楼盘价格预测

发表于 2019年03月23

前言

本来这个需求不在列表中,受到Kaggle比赛:Kaggle Boston Housing(https://www.kaggle.com/c/boston-housing)的启发,加入了这个功能。因为数据全部靠自己收集,特征也远不如比赛中的数据集多,最终预测的效果我觉得虽然误差比较大,但是也有一定的参考价值。

数据清洗和特征工程

从数据库中抽取了一部分好量化的上海市数据作为基本信息,
Fig.1原始数据在此基础之上,引入了该楼盘周边1km范围内地铁站数量、医院数量、学校数量、商场数量(数据来自百度API,可以参见另一篇blog)和该楼盘所在区域的区域均价。
从Figure1中可以看到从某壳网上爬取下来的数据中包含很多汉字、符号,还有缺失值需要填补,另外还有格式不统一的情况,所以在数据清洗上花了很多时间。对数据中的字符型数据转换:

1
2
3
4
5
6
7
8
# 数据预处理,填充缺失值以及特征中含有字符的转换为数值型
# "price","propertyType","landscapingRatio","siteArea","floorAreaRatio","buildingArea","yearofpropertyRights",
# "numPlan","parkingRatio","propertycosts","parkingSpace","hospital","metro","school","mall","id"
# 住宅:1 写字楼:2 别墅:3 商业:4
train.loc[train["propertyType"] == "住宅", "propertyType"] = 1
train.loc[train["propertyType"] == "写字楼", "propertyType"] = 2
train.loc[train["propertyType"] == "别墅", "propertyType"] = 3
train.loc[train["propertyType"] == "商业", "propertyType"] = 4

对部分特征统一数据格式后,缺失值用均值进行填补:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
train['landscapingRatio'] = train['landscapingRatio'].fillna(train.groupby('propertyType')['landscapingRatio'].transform('mean'))
train['siteArea'] = train['siteArea'].fillna(train.groupby('propertyType')['siteArea'].transform('mean'))
train['floorAreaRatio'] = train['floorAreaRatio'].fillna(train.groupby('propertyType')['floorAreaRatio'].transform('mean'))
train['buildingArea'] = train['buildingArea'].fillna(train.groupby('propertyType')['buildingArea'].transform('mean'))
train = train.fillna(0)
train['yearofpropertyRights'] = train['yearofpropertyRights'].astype(float)
train['numPlan'] = train['numPlan'].astype(int)
train['parkingRatio'] = train['parkingRatio'].astype(float)
train['propertycosts'] = train['propertycosts'].astype(float)
train['parkingSpace'] = train['parkingSpace'].astype(int)
train['yearofpropertyRights'] = train['yearofpropertyRights'].fillna(train.groupby('propertyType')['yearofpropertyRights'].transform('mean'))
train['numPlan'] = train['numPlan'].fillna(train.groupby('propertyType')['numPlan'].transform('mean'))
train['parkingRatio'] = train['parkingRatio'].fillna(train.groupby('propertyType')['parkingRatio'].transform('mean'))
train['propertycosts'] = train['propertycosts'].fillna(train.groupby('propertyType')['propertycosts'].transform('mean'))
train['parkingSpace'] = train['parkingSpace'].fillna(train.groupby('propertyType')['parkingSpace'].transform('mean'))

Fig.1清洗完成

XGboost简介

后期会把在公司做的seminar的ppt放上来

建模

Step 1
读取数据集,为了增强模型的泛化能力,筛掉了单价超过50000元/平方米的数据,实验结果证明效果对二三线城市的预测效果比较好,但在像上海、北京这样房价过高的城市表现一般。

1
2
3
4
5
6
7
8
dataset_train = 'house_trainset2.csv'
data_train = pd.read_csv(dataset_train)
data_train = data_train[data_train['price'] <= 49999]
scaler = MinMaxScaler(feature_range=(0, 1))
pd.set_option('display.width', None)
X = data_train.drop(['id', 'price', 'Unnamed: 0', 'numPlan'], axis=1)
X = scaler.fit_transform(X)
y = data_train.price

随机拆分训练集和测试集后,fit到模型中,模型的参数调整用了Sklearn中的GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。

1
2
3
4
5
6
7
8
9
10
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123)
cv_params = {'n_estimators': [400, 500, 600, 700, 800]}
other_params = {'learning_rate': 0.1, 'n_estimators': 400, 'max_depth': 5, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params, scoring='r2', cv=5, verbose=1, n_jobs=5)
optimized_GBM.fit(X_train, y_train)
evalute_result = optimized_GBM.grid_scores_
print('每轮迭代运行结果:{0}'.format(evalute_result))
print('参数的最佳取值:{0}'.format(optimized_GBM.best_params_))
print('最佳模型得分:{0}'.format(optimized_GBM.best_score_))
print(xg_reg.feature_importances_)

预测结果

结果1
结果2

项目实训-第二周总结

发表于 2019年03月11 | 分类于 项目实训

前言

第二周结束项目的大部分简单需求已经实现,超过了预期的速度。两个组员在隔壁新国大实习,我周五也要去Bosch实习了,下周要加快进度。

定位

网站的定位是面向购买新房的投资者或者有住房提升需求的买房者的功能性网站,数据分析>房源展示。

已完成的需求

  1. 按用户输入城市名称,爬取和显示城市不同小区,不同区域的房价,并用柱状图显示
    Fig.1显示看了周一的模拟产品发布以后,发现隔壁组的UI做的很好看,扁平化设计,准备在产品功能实现后再调整。
  2. 按年份,月份,显示和分析某区域房价走向和趋势
    Fig.2图表1收集到的数据的粒度到月,住建局有到天的成交数据,但是很多特征都没有就没有采集。
    Fig.3图表2ECharts确实很好用,提供了一些直观、易用的交互方式以方便对所展现数据的再加工。

    待完成的需求

    预测模型的训练已经完成,为了不和其他组撞车,准备加入两个预测模块。
    1.新楼盘开盘价预测(博文会在第三周整理后发布)
    输入:用户输入新楼盘的一些信息,城市+小区名称(在后台调用百度地图API返回小区周边信息数据)、绿化率、容积率、车位比等数据
    输出:该新楼盘的开盘价格
    Fig.4预测1(基于XgBoost)图中的蓝色点是训练集中上海新楼盘的真实信息,但是训练的结果和Kaggle中波士顿房价预测那题的结果相差甚远,我想有几个原因:第一是上海主城区房价过高,但是新楼盘少,新城区房价较低,新楼盘多,这些离群点让模型产生了较大误差;第二,Kaggle比赛的数据集很全,虽然说有缺失值和部分错误值,但是用Pandas完全可以解决这些小错误,我们这次预测的数据集60%来自链家,40%是自己收集的,在专业性上相差较多,导致没有比赛数据集所呈现的统计规律。
    2.房价走势预测(博文会在第三周整理后发布)
    输入:数据库中某城市粒度位月的历史房价
    输出:未来一个月的房价趋势
    Fig.5预测2(基于LSTM)

Pandas处理数据时replace方法失效

发表于 2019年03月05 | 分类于 项目实训

BUG复现

1
train.replace('%', '', inplace=True)

使用replace函数的目的是:在清洗房价数据时替换掉不需要的单位,如“%”,“元/m²/月”等。但在使用函数时发现无法生效,查了网上相关信息后试了多种方法也无法解决这个问题,如先取列之后再进行replace。

1
train["landscapingRatio"].replace('%', '', inplace=True)

原因推测

dataframe中每个列中值的dtypes不同,导致无法replace。

解决方法

使用map()和lambda函数

1
train["landscapingRatio"] = train["landscapingRatio"].map(lambda x: x.replace('%', ''))

map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

123

Fu Hanlin

SEU

29 日志
7 分类
36 标签
RSS
GitHub E-Mail Facebook Instagram
© 2020 Fu Hanlin
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4