用win10的linux内核运行openai.baselines的多进程环境
前言
- 环境: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 算法亦正常,完美。