在windows 10的Ubuntu子系统使用Pytorch

Pytorch 不支持 Windows,不过 Windows 10 提供了 Ubuntu 子系统,可以提供近乎原生的 Linux 环境,虽然并不是一个最好的选择,但我们仍然可以通过 Ubuntu 子系统来运行 Pytorch 程序。

需要准备

  • Windows 10
  • Pycharm 专业版

基本思路

  • Windows 10 安装 Ubuntu 子系统
  • 子系统开启 SSH
  • Pycharm 编写 Python 代码,使用专业版的上传代码到服务器的功能,将 Python 代码通过 sftp(SSH File Transfer Protocol) 上传到本地 Ubuntu 子系统运行调试。

Ubuntu 子系统(WSL)

微软从 Windows 10 开始推出了 Linux 子系统(Windows Subsystem for Linux, WSL)的功能,起初只有 Ubuntu 子系统,现在逐渐推出了多个发行版(包括 Ubuntu,openSUSE,SUSE Linux Enterprise Server 12),主要给开发者使用,可以在 Windows 平台提供 Linux 的开发能力,类似于虚拟机,但是底层实现是直接重写系统调用,因此性能更好。

启用 Ubuntu 子系统

Windows 10 默认没有开启 Linux 子系统,可以根据微软官方的Linux子系统安装指引来开启。

开启后如何打开 Linux 子系统?
在 cmd 或者 powershell 中执行 bash 即可。我们可以开启该系统的 ssh 服务,这样就可以在 xshell 等工具中方便连接。

安装 Pytorch

在命令行输入 bash 打开 Linux 子系统,首先安装 Python 3 或者 conda,然后使用 pip 或者 conda 安装 Pytorch,可在pytorch.org找到最新版的安装命令。

安装 conda
anaconda官网下载安装脚本并执行安装。

wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
bash Anaconda3-5.0.1-Linux-x86_64.sh

安装 Pytorch
pip:

pip3 install http://download.pytorch.org/whl/cpu/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl 
pip3 install torchvision

conda

conda install pytorch-cpu torchvision -c pytorch

子系统开启 ssh

接下来的操作都是在子系统中执行。

1.重装 ssh-server
默认的 ssh-server 使用 service ssh start命令开启时总会报错且无法连接,2017年3月Github就有人open了issue,微软至今没有修复,目前的解决方案是要先重装一下 ssh-server。

sudo apt-get remove --purge openssh-server
sudo apt-get update
sudo apt-get install openssh-server

2.修改 SSH 配置
编辑 ssh 配置文件,依次输入:

vi /etc/ssh/sshd_config
:%s/Port 22/Port 2222/
:%s/PermitRootLogin prohibit-password/PermitRootLogin yes/
:wq

以上操作,开启 2222 端口(或者自定义其他端口,默认的22端口已经被 Windows 占用),允许用密码登陆,保存退出。
3.开启 SSH 服务

sudo service ssh --full-restart

**4.在 xshell 中连接子系统
接下来就可以通过 xshell 等工具连接本地服务器了。最终我们需要在 Pycharm 中配置 SSH 连接。

Pycharm 连接子系统运行调试 Pytorch 代码

Pycharm 专业版提供了在远程服务器上运行调试代码的功能,非常方便,因此我们可以配置将 Pytorch 程序在 Linux 子系统中运行。

具体操作可以参考 Pycharm 官方的远程调试教程

其他问题

保持 ssh 始终开启

Windows 子系统还是有不好用的地方,一旦执行 bash 的命令行窗口被关闭,子系统的 ssh 服务就会被杀死。而且开机后子系统不会启动,因此如果要使用子系统的 SSH 连接,每次开机后,需要打开命令行执行

bash
service ssh start

由于 bat 等脚本执行会有一个黑窗口,每次开机会弹窗,因此我写了个 jar 来执行这两句命令,将该 jar 放在 windows 的计划任务中,开机自启即可。

Download the Jar on Github
Download the Jar on Github

在 windows 中搜索并打开计划任务程序,在任务计划程序库中创建任务,操作选择启动程序,程序或脚本填写 javaw,可以隐藏 java 窗口,参数填 -jar “${jar路径}”触发器选择登陆时,并勾选延迟任务时间 15 秒,因为经测试,系统启动时 linux 子系统会没有启动完成,命令会执行失败。

bash中文乱码

子系统开启后会发现无法显示中文,因为系统没有安装中文语言包。

安装并修改系统地区配置。

sudo apt-get -y install language-pack-zh-hans
echo "LC_ALL=zh_CN.utf8" >> /etc/profile
echo "export LC_ALL" >> /etc/profile
source /etc/profile

共有 0 条评论

发表评论

电子邮件地址不会被公开。