Win10 Linux子系统 + gym[atari] + multiprocessing

前言

  • 环境:win10, pycharm, conda, pytorch。
  • 问题:借助 openai.baselines 复现 A2C 一系列算法 时,先后遇到两个问题,一是“OSError: [WinError 126] 找不到指定的模块"(小问题,参考 github issues,不过我不建议用 pip install gym[atari] 安装 atari-py,而是先 pip install gym,然后 pip install -f https://github.com/Kojoley/atari-py/releases atari_py(参考这篇),连 cmake 都不用安装了,稳妥);二是 multiprocessing.get_context(‘fork’) 函数不支持 windows 系统(不想装虚拟机,看 github 上有人用 win10 的 linux 内核搞定了这个问题,心动了),本文总结了网上收集的资料,针对性记录了第二个问题的解决方案,。

近日在学习 OpenAI 的开源 baselines,以及其 pytorch 实现,在测试 Atari 环境时遇到了不少问题,终究是错付了 win10,还是用 linux 来跑吧。

启用 win10 的 Linux 内核

参考文章

1. 启动开发者模式

开始菜单 - 设置 - 更新与安全 - 开发者选项 - 启动开发人员模式(win10 专业版和家庭版的业界稍有不同)

2. 启用 linux 功能

开始菜单 - 搜索【控制面板】 - 程序 - 启用或关闭 Windows 功能 - 勾选【适用于 Linux 的 Windows 子系统】 - 重启电脑

3. 在应用商店安装程序

开始菜单 - 搜索【应用商店】 - 搜索【linux】 - 安装 Ubuntu (18.04/20.04) - 启动(第一次启动需要安装系统,比较久) - 设置用户名和密码

如何访问原 win10 的文件系统

参考文章

  • 从 linux 中访问 win10:cd /mnt/c/YOUR/PATH (mnt 是 mount 的意思,c 是指 C 盘,访问其它盘同理)
  • 从 win10 中访问 linux:系统根目录为 C:\Users\YOURNAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs
  • 因为我的主要目的是在 linux 下运行 PyCharm 项目,所以我在 linux 的 home 目录下添加了个 快捷方式ln -s /mnt/c/Users/YOURNAME/ win10
  • 方便起见,启用跨系统的复制粘贴:ubuntu窗口上边框 右键 - 属性 - 选项 - 勾选【将 Ctrl + Shift + C/V blabla】

完成 cmake 相关基础配置

1. 安装基础配置

sudo apt-get install update && sudo apt-get install upgrade && sudo apt-get install build-essential

2. 安装 cmake

sudo apt-get install cmake

3. 安装 zlib

sudo apt-get install zlib1g-dev

在 mini-conda 环境下安装 gym[atari]

1. 上 官网 下载对应安装包/复制下载链接

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

2. 安装 mini-conda

bash Mini....sh - 疯狂按 Enter - 按指示行事 - 重启 Ubuntu (关掉窗口重新打开即可)

3. 创建虚拟环境

conda create -n ENVNAME
conda activate ENVNAME

4. 安装 Pytorch CPU 版本

修改 conda 的源:

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/pytorch/
conda config --set show_channel_urls yes

参考 官方命令,将 -c pytorch 去掉(这意思是使用官方默认的源,特别慢)
conda install pytorch torchvision torchaudio cpuonly

5. 安装 gym[atari]

pip install gym[atari] (查了一圈以及试验了一圈,似乎没有类似 conda install gym[atari] 的安装方式,弃疗)

测试

运行以下代码(写入一个 .py 文件也好,直接在 conda 窗口中交互也好)

import gym
import atari_py

env = gym.make('PongNoFrameskip-v4')
print(env.observation_space)

预期正常返回 Box(0, 255, (210, 160, 3), uint8),如果是那就恭喜你。如果不是……节哀吧。

BTW,测试 Atari 环境下的 A2C 算法亦正常,完美。


版权声明:本文为weixin_42527725原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。