Anaconda 虚拟环境搭建与管理

安装 直接从官网下载最新版本的 Anaconda3-5.3.0,然直接运行安装即可.Arch Linux 用户可以直接用 ArchLinuxCN 源安装.默认安装路径为 /opt/anaconda,使用的时候需要先 source /opt/anaconda/bin/activate. 添加国内开源镜像 安装完毕第一件事就应该是修改软件源为国内的开源镜像,可以使用中科大或者清华的镜像.Linux 下打开终端,Windows 打开开始菜单->All Programs->Anaconda3(64 bit)->Anaconda Prompt,然后开始输入命令. 中科大的镜像: conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes 或者使用清华大学的镜像: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes 以上就是我们比较常用的 channel 了,还有其他 channel 可以添加,有需要的同学可以看看开源镜像站点的说明.特别是清华大学的开源镜像还提供了 PyTorch 官方 channel,可以根据需要添加:

more...

使用 ArchLinux 进行深度炼丹

缘起 见此文有感而发. 目前大家深度炼丹普遍使用的是 Ubuntu 系统,看 CUDA 支持的发行版,自然也会有 Cent OS 和 openSUSE.实验室使用的也是 Ubuntu 系统,最终也才终于将全部机器都升级为 Ubuntu 16.04,用上了 systemd OS. 然而,Ubuntu 16.04 用起来还是各种麻烦,最难过的是软件包的版本不更新,遇到依赖问题比较难解决,安装 N 卡驱动也不够省心. 实际上用得最顺手的还是 Arch Linux.那么如何在 Arch Linux 上深度炼丹呢?So easy.只需要三步:安装 Arch Linux,安装 N 卡驱动和深度炼丹框架,开始炼丹. 安装 Arch Linux 和炼丹框架 安装 Arch Linux 这一步应该直接参考 Arch wiki 的安装指南,这里就不废话了. 关于 Arch Linux 的安装小声 bb 考虑到目前大多数主板都是用的 UEFI,建议分区使用 GPT 分区表,在固态硬盘上分一个 500M 左右的 FAT32 文件系统的 boot 分区,然后剩余空间丢给根分区,机械硬盘就全部分给 home 分区,如果后期有增加机械硬盘的打算,可以配 LVM,方便扩展.然后安装引导的时候,建议使用 GRUB.安装 GRUB 的命令为: grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB 这里的 esp 应该就是 /boot 分区.

more...

ArchLinux 上搭建 Jupyter Notebook 服务器

安装 Jupyter 和 nginx 一行代码搞定: # pacman -S jupyter nginx 启用 nginx 服务: # systemctl start nginx # systemctl enable nginx 配置 这个才是我想说的重点.看了一些资料,因为对 nginx 不是很了解,所以才看不明白.首先,为了避免升级的时候配置文件被覆盖,先创建两个存放配置文件的目录,/etc/nginx/sites-available 和 /etc/nginx/sites-enabled,有的发行版已经有了这两个目录的就可以不用创建了.一般我们将配置文件写到 /etc/nginx/sites-available 目录下,然后需要启用的时候在 /etc/nginx/sites-enabled 新建一个相应的软链接即可.编辑 /etc/nginx/nginx.conf,在 http 这一节加入一行: include /etc/nginx/sites-enabled/* 很多文章就只说 nginx 的配置很简单,但是不懂 nginx 的人看了还是摸不着头脑.实际上还要添加 /etc/nginx/sites-available/jupyter.conf: server { listen PORT; # PORT 为反代端口,根据需要选择 location / { proxy_pass http://127.0.0.1:JUPYTER_PORT; # JUPYTER_PORT 为 Jupyter 运行端口 proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.

more...

LVM 实战:ArchLinux 上将 home 分区放在两块硬盘组成的 LVM 上

情况简介 已经安装好的 Arch Linux,分区情况如下: /dev/sda1 /boot /dev/sda2 / /dev/sdb1 /home 现在新增一块硬盘 /dev/sdc,希望可以将 /dev/sdc 分给 /home 分区.理所当然地想到使用 LVM. 实战 首先是对 /dev/sdc 分区,直接使用 gdisk 工具,分一个 Linux LVM 分区,gdisk 中的分区类型为 8e00.这一个硬盘只分一个分区 /dev/sdc1 即可. 然后创建物理卷(physical volume, pv), pvcreate /dev/sdc1 创建卷组(volume group, vg),这里设定卷组名称为 homevg, vgcreate homevg /dev/sdc1 创建逻辑卷(logical volume, lv),这里设定逻辑卷的名称为 homelv,并将卷组的所有空闲空间分给它, lvcreate -l 100%FREE homevg -n homelv 创建好的逻辑卷在 /dev/<volume_group>/<logical_volume> 下,可以将它看作我们平时使用的类似 /dev/sda1 分区,将其格式化,并挂载即可使用. 创建文件系统,也就是格式化分区,我们这里使用 XFS 文件系统: mkfs.xfs /dev/homevg/homelv 将逻辑卷挂载, mount /dev/homevg/homelv /mnt 将 /home 分区的内容复制到逻辑卷,

more...

操蛋的 Ubuntu

今天尝试着升级 Ubuntu,从 Ubuntu 14.04 LTS 升级到 Ubuntu 16.04.首先编辑 /etc/update-manager/release-upgrades,修改为: Prompt=lts 然后执行升级命令: sudo do-release-upgrade 一切都很顺利的样子.登录上去执行一个 sudo apt update,提示 GLIBC 有误.明显就是 libstdc++6 这个包出问题了,直接从镜像源下载一个,然后使用 dpkg -i package.deb 安装.Done.然后再次执行 sudo do-release-upgrade,提示没有可以更新的版本.应该使用 sudo do-release-upgrade -d.结果更糟糕,提示遇到无法解决的问题,建议我报告 bug.不死心,修改 /etc/update-manager/release-upgrades: Prompt=normal 然后更新到了 17.10.再次尝试更新,sudo do-release-upgrade,依然提示同样的错误.Emm,肿么办?不怕,我们直接修改 /etc/apt/sources.list,把源换成 18.04,然后刷新软件源并升级: sudo apt update sudo apt dist-upgrade 终于给个有用的提示了,virtualbox 的一个包 virtualbox-dkms 有依赖问题无法解决.所以 do-release-upgrade 是二傻子么?遇到升级的时候遇到无法解决的依赖也不提示一下用户是什么依赖无法解决?先卸载 virtualbox,然后 sudo do-release-upgrade,这就可以升级了. Ubuntu 这是自作主张,觉得用户没法解决问题,do-release-upgrade 根本就不给出有用的错误信息.Fuck you, Canonical Ubuntu! 要不是大家搞深度学习都用的 Ubuntu,我才不会考虑用它啊.真要用 Deb 系的也是考虑 Debian 啊.

刀片服务器 CPU 节点使用指北

查看可用资源与计算节点状态 在提交任务或者作业之前,务必检查一下各个节点的状态,例如资源是否充足,当前有多少在执行的任务等等.使用命令 pbsnodes -a 可以查看所有节点的状态,free 表示空闲. 提交任务 用户需要编写一个 PBS 脚本来完成作业提交的设置.PBS 脚本可以在本地编写完成后上传,也可以在服务器上编辑.注意脚本内容中不要包含中文字符,在 Windows 系统下编辑的时候,可以用 Notepad++,并另存为,将换行符设置为 Unix (LF) 模式. 编写 PBS 脚本 一个简单的 PBS 脚本的模板如下,注意这里的中文注释是方便大家理解,最后都要删掉的. #!/bin/bash #PBS -N <jobname> ### 在 X 个节点上申请 Y 个 CPU 核心 #PBS -l nodes=X:ppn=Y ### 可选值为 q1, q2, q3,根据用户所在的组别选择对应的队列 #PBS -q <队列名> ### 合并标准错误输出和标准输出 #PBS -j oe ### 切换路径 cd $PBS_O_WORKDIR ### 运行需要执行的脚本或者命令 #### matlab 脚本这样子运行 matlab -nodesktop -nodisplay -nosplash < <m 文件> > <matlab 输出日志文件> ### python 脚本可以这样子写 python <python 脚本文件名> 其中第一行是固定的,表示用 /bin/bash 来执行脚本.#PBS 开头的行用来设置 PBS 选项,比如使用的资源等等.每组只有 3 个节点,每个节点的最大 CPU 核心数量为 16,申请时不能超过最大值.在确定申请 CPU 核心数量之前,请先确定是否需要这些计算资源.如果程序本身的并行程度不高(由你的代码决定),申请过多的节点和 CPU 核心数量会造成资源的浪费,并且影响他人的使用.

more...

vlmcsd service in Linux

vlmcsd 是一个 KMS 服务端软件,用于 M$ 产品的激活与授权. 安装 自己去官网下载源码编译打包.Arch Linux 用户可以去 AUR 找现成的 PKGBUILD 脚本打包. 启动服务 Arch Linux 的 AUR 中的 vlmcsd 包有提供一个 systemd unit,内容如下: [Unit] Description=KMS Emulator [Service] Type=forking User=nobody ExecStart=/usr/bin/vlmcsd [Install] WantedBy=multi-user.target 可以根据上述内容自己创建一个,然后复制到合适的路径.启动并设置开机启动服务: systemctl start vlmcsd systemctl enable vlmcsd vlmcsd 的默认端口为 1688,如果有防火墙的请修改防火墙设置. 使用方法 Windows 打开 cmd,使用命令安装批量授权 key: slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx 其中批量授权 key 可以从这里根据 Windows 版本选择对应的 key. 设置 KMS 服务器地址: slmgr /skms IP 其中 IP 为你的 vlmcsd 服务的 IP.然后激活:

more...

一个简单而又相对完整的 Qt Charts 例子

不想说太多,请直接看代码.这个例子相对比较简单,但是绘图所需的各种元素都尽量涉及到了,以期给出一个完整的参考例子. 参考 补充一些很有用的参考文章. 这篇 Qt Charts入门指南 提供了使用 Qt Charts 的两种方法的例子,QChartView + QChart 以及 QGraphicsScene + QChart. 这篇 Qt Charts 基本组成 介绍了 Qt Charts 的主要类,有利于从全局把握. 最后,还是建议多看 Qt 的官方文档,它们的文档应该可以说是开源项目里写得最好的那一批了.

利用 cURL 分块下载大文件

缘起 自己的 VPS 是个小家伙,硬盘只有 10G,装完系统,能用的空闲空间也不过 7G 左右.但是我需要从国外的服务器下载一些数据,文件都比我的硬盘大.直接下载到本地速度不够快,而且下载链接有时效,只能考虑先下载到 VPS 上,然后再转移到本地.自然而然的想到一个办法就是分段下载文件到 VPS 上,最后转移到本地之后再拼接起来. 前提 使用本文的方法需要服务器支持 HTTP Range Request,否则只能老老实实地买个硬盘大的 VPS 进行下载.至于怎么确认服务器是否支持,我首先想到的是从服务器分段下载一个较小的文件,然后拼接,对比直接下载完整的文件是不是一致. 其实也可以用 cURL 查看返回的请求头.例如: curl -I http://mirrors.ustc.edu.cn/debian-cd/current/amd64/iso-cd/debian-mac-9.3.0-amd64-netinst.iso 返回结果 HTTP/1.1 200 OK Server: openresty Date: Sun, 21 Jan 2018 13:45:58 GMT Content-Type: application/octet-stream Content-Length: 307232768 Last-Modified: Sat, 09 Dec 2017 13:04:52 GMT Connection: keep-alive ETag: "5a2bdf74-12500000" Accept-Ranges: bytes 看到了 Accept-Ranges: bytes,说明这个服务器是支持 HTTP Range Request 的.如果返回结果中不含 Accept-Ranges,则很有可能是不支持 HTTP Range Request 的.有的服务器会显式返回 Accept-Ranges: none 表示不支持 HTTP Range Request.

more...

XRPD 相关的一个小问题——关于 `thinclient_drives` 目录的错误

关于 XRPD 是什么,我就不废话了.它会在远程 Linux 主机的用户家目录下创建一个 thinclient_drives 目录,用于驱动器的映射.这个目录实际上应该是用 fuse 挂载的.但是有的时候会遇到该目录的权限错误,如下: d????????? ? ? ? ? ? thinclient_drives/ 它的权限位全部变成了问号.这个是因为挂载出现了问题.如果你尝试使用 fuser thinclient_drives 去分析它,会得到提示: 无法分析 /home/user/thinclient_drives: 传输端点尚未连接 或者 Cannot stat /home/user/thinclient_drives: Transport endpoint is not connected 实际上就是挂载出现了错误.如果你使用 XFCE 的文件管理器 Thunar,你甚至会无法打开文件管理器.解决方法很简单,只需要将其正确卸载即可: fusermount -u thinclient_drives Over. 参考:FUSE error: Transport endpoint is not connected