吉游网提供最新游戏下载和手游攻略!

为了交房租,他出了个星际争霸2 AI的教程

发布时间:2024-08-20浏览:94

Root 发自 凹非寺

量子位 出品 | 公众号 QbitAI

自从去年8月10号暴雪开放了星际争霸II的人工智能API之后,数不清的AI研究者前赴后继地加入了训练星际2 AI的队伍中。

但并非所有人都舍得掏钱购买昂贵的GPU。还好,谷歌近期大发善心提供免费的云GPU,这下有更多的人可以训练星际2AI了。

那用免费的GPU训练AI会遇到哪些坑?

以下是post全文:

太长不看版:如果你想用GPU硬件搭建一个免费的星际争霸II机器学习的环境,看我在谷歌Colab上的笔记:https://colab.research.google.com/drive/1AzCKV98UaQQz2aJIeGWlExcxBrpgKsIV

最近,我和几个好基友一起搞了个星际争霸II的项目。

我始终持有一个观点,就是搞机器学习研究的人,得有能力快速训练神经网络。这一点相当重要。

我就自己先动手试了一下。

没想到,下载完星际争霸II和安装上必要的数据库之后,遇到这茬:

Return代码是啥玩意儿

看来得先搞清楚Return代码是个啥。

我翻出PySC2 source看了下,找到了设置Return代码的部分。

进一步挖掘,发现poll()这一块是源自Python的subprocess模块。这说明11是终止星际争霸程序的信号。

信号11是可怕的segfault,绝对算C程序员的噩梦。

为了看问题是不是出在这,我找到了可执行的SC2,然后让它自己运行起来。

Emmm……

开启Debug的地狱模式

一般来说,我会直接打开用得最顺手的Debug工具。但这样,这篇文章就不过是个怎么用GDB的流水账了。

但,这不是在Google Colab上嘛,我们有的只是Jupyter Notebook网页。这就意味着:

没有Debugger;

没有Root权限;

好多工具不能用,比如说Strace。

RIP debug中

当你只能用网页时……

我就试了服务器上不同版本的星际争霸II,包括暴雪提供4.0.2版本,3.17版本,和3.16.1版本。

居然!都不行!生气……

那我只能在本地Linux系统上跑星际争霸II了,毕竟这个环境我熟,有把握可以debug。这样才能验证我的猜想。

第一个可能的原因:没找到必需的数据库

刚开始我猜,星际争霸作为一个游戏,应该是要一些OpenGL里的函数以及库。而这些东西在谷歌Colab里没有。

为了验证这个假说,这次我本地运行了星际争霸II。然后用strace,记录星际争霸II的一切系统调用,所有的库都是从操作系统加载的,这样就能知道缺了什么依赖库。

这里是日志中的一个片段:

完整的日志见:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode

看结果,发现StarCraft II除了动态地链接到那些标准C/C++库,没做什么别的,这就排除了这个猜测。

还有哪些segfault?

又因为本地跑的没有挂,说明暴雪给的码也没有问题。

谷歌搜怎么debug段错误的时候,想起了Valgrind。我惊讶地发现,他居然就在谷歌Colab工作。

Valgrind给出代码片段如下:

我唯一能看出来的函数是libtcmalloc.so.4.3.0里的MallocExtension::Initialize()。

可能有不知道TCMalloc的盆友,这其实是个谷歌定制化记忆分配器。谷歌Chrome浏览器用的也是这个。

但是……

当我用strace找错的时候,我只记得看到了C和C++标准库的加载。那TCMalloc是从哪里冒出来的?

后来发现,有个办法可以在没有TCMalloc的程序上强行使用TCMalloc。

在Linux上设定LD_PRELOAD环境变量,加载TCMalloc共享库后,就搞定。

很好奇,在谷歌Colab上看会是什么样?

矮马!就这个!

解决方案

可是,设定LD_PRELOAD环境变量无法扩展到其他环境里去。

执行这段:

我已经卸载了TCMalloc。然后,除了一些错误的提示信息,星际争霸II现在可以跑起来了。这会儿总算可以开始训练星际争霸II的AI了。

我写了份针对谷歌Colab的bug文档,这样以后大家遇到类似问题就不用再纠结了。

bug文档:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode

不过,等星际2的AI出来还早。

我们拭目以待。

最后我想感谢一下Paul和William,StarAI,是他们告诉我PySC2,以及带的我入坑机器学习。

如果大家遇到高难度的bug,有debug的需求可以找我,我可以提供相应的服务。这是我LinkedIn的介绍,https://www.linkedin.com/in/franklin-h-804b85a0/

最后,附小哥哥post链接:

https://medium.com/@n0mad/how-i-trained-starcraft-2-ais-using-googles-free-gpus-44bc635b0418

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

վ'ᴗ' ի 追踪AI技术和产品新动态

用户评论

她最好i

这个星际争霸2 AI教程真是帮了大忙了,终于可以自己出图赚钱了!

    有5位网友表示赞同!

陌潇潇

学习了这么多关于星际争霸2的知识,感觉整个人都升华了。

    有19位网友表示赞同!

凉凉凉”凉但是人心

没想到一个简单的游戏也能如此深入地探索AI技术,太酷了!

    有14位网友表示赞同!

坠入深海i

通过这个教程,我对人工智能有了更深的理解。

    有7位网友表示赞同!

孤自凉丶

教程里提到的策略和技巧让我在游戏中如鱼得水。

    有5位网友表示赞同!

高冷低能儿

作者讲解得太详细了,即使是新手也能轻松上手。

    有20位网友表示赞同!

一笑傾城゛

谢谢作者的分享,我终于明白如何玩好星际争霸2了!

    有14位网友表示赞同!

水波映月

这个教程让我的房租问题迎刃而解,真是太棒了!

    有9位网友表示赞同!

夜晟洛

我喜欢这种把复杂问题简单化的教学方式。

    有6位网友表示赞同!

纯真ブ已不复存在

星际争霸2 AI教程里的案例分析很有启发。

    有7位网友表示赞同!

不忘初心

作者真的很用心,每个环节都有详细的解释。

    有6位网友表示赞同!

恰十年

这不仅仅是一个游戏教程,更像是一本智能手册。

    有19位网友表示赞同!

情字何解ヘ

感谢作者的辛勤工作,希望有更多这样的教程出现!

    有17位网友表示赞同!

伱德柔情是我的痛。

教程中的一些高级策略真的让我眼前一亮。

    有10位网友表示赞同!

青墨断笺み

如果你是星际争霸2爱好者,一定要看看这个教程。

    有14位网友表示赞同!

景忧丶枫涩帘淞幕雨

学习的过程中,我发现自己对游戏的热爱更加浓厚了。

    有13位网友表示赞同!

寂莫

作者的耐心讲解让人感到很温暖。

    有10位网友表示赞同!

莫阑珊

这个教程真的是物超所值,强烈推荐给所有玩家!

    有17位网友表示赞同!

烬陌袅

学到了很多新知识,也提高了自己的竞争力。

    有12位网友表示赞同!

来瓶年的冰泉

对于那些想要提高自己在星际争霸2中的水平的人来说,这是一个必看的教学视频。

    有9位网友表示赞同!

漫长の人生

这个教程给我带来了新的视角看待这款经典的游戏。

    有13位网友表示赞同!

身影

学习的过程充满了乐趣,期待下一次的更新!

    有15位网友表示赞同!

热点资讯