分类 Windows 下的文章

老版pytorch配新版编译器会出现一些奇怪的问题,在这里记录一下。

  1. Could not find libuv_tmp_LIBRARY using the following names: uv, libuv

libuv是做分布式异步io用的,咱们Windows单机用不到这个,通过设置环境变量USE_DISTRIBUTED=0跳过这一问题。

  1. algorithm(7417): error C2678: binary '*': no operator found which takes a left-hand operand of type 'const _BidIt' (or there is no acceptable conversion) [pytorch\build\caffe2\torch_cpu.vcxproj]

这个是mkl-dnn的问题,参考这个issue

解决方法:升级mkl-dnn到1.7版本,或在aten/src/ATen/native/CompositeRandomAccessorCommon.h文件的第132行,在

reference operator*() {

处添加const关键字,修改为

reference operator*() const {

再重新执行编译指令即可。

  1. pytorch\caffe2\utils\math_gpu.cu(898): error : namespace "thrust" has no member "host_vector" [pytorch\build\caffe2\torch_cuda.vcxproj]

这个是CUDA的问题,恰好是11.4版本引入的,参考这个issue

解决方法:在caffe2/utils/math_gpu.cu文件头部添加头文件引用:

#include <thrust/host_vector.h>

然后重新编译即可。

为了玩玩最近很火的AI作画Stable Diffusion,不得不想办法把我在古台上囤了N多的陈年老数据转移到机械大house上。按照常规操作,较为合理的方法是做出共享文件夹,然后用robocopy来更新具体数据。

然而直接卡在了第一步= =

右键文件夹一看,那个熟悉的“共享”选项卡不见了,接在“常规”后面的就是“安全”。。。

马上某度,发现也有许多人遇到这个问题,大致情况可以归类为两种:

一是注册表损坏,用于展示共享文件夹的COM组件配置丢失,这个需要通过手动设置HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers\Sharing表项的值为{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}来修复;

二是系统组件运行异常,主要关注Security Accounts ManagerServer两个服务的运行状态,确保它们处于正常运行状态才能正常显示选项卡。

然而经过确认,我电脑上这两个地方都没问题,重启多次仍然不见问题解决。而后在绝望之中碰巧看到了另一篇博客,发现竟然是三哥干的好事。。。

实际上,在注册表里,除了有启用COM组件的配置之外,还有禁用的配置,比如HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked注册表项。打开一看,上面Sharing的COM CLSID{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}赫然躺在里面。

WTF??我用的好好的,结果你把他给我禁用了?当场删除了对应的注册表子项,甚至不用重启,许久不见的共享选项卡就回到了属性界面。

忽然想起某乎上的吐槽,阿三工程师的特点之一就是做事自在,指不定哪天心情好就把哪个feature给你改了,但是只要你不问他,他就绝不会跟你提到这个事。

这咖喱味的系统我是一秒也不想多用了.jpg

参考:

  1. https://techcult.com/fix-sharing-tab-is-missing-in-folder-properties/
  2. https://weblog.west-wind.com/posts/2020/Apr/13/Missing-Sharing-Tab-in-Windows-Explorer

最近新换了个电脑,宏碁的暗影骑士擎,属于比较少见的2NVME+1SATA配置的大存储型号了。俗言人尽其才、物尽其用,宝贵的SATA接口怎么能干放着不利用起来,于是就把老电脑上的1TB汰渍拆下来,拿过来继续当系统盘用。然而intel总喜欢搞些幺蛾子,当年阻碍6/7代U用Windows 7的XHCI、这次的主角Intel RST,都花了我老大功夫才解决问题。

按道理来说,把硬盘从老电脑上一拔、往新电脑上一插、开机键一按,系统就应该噌噌地跑起来才对。然而,事与愿违,启动SATA盘上的系统的时候,不是黑屏,就是出现INACCESSIBLE_BOOT_DEVICE蓝屏。到巨硬官网可以了解到,这个问题通常是因为系统分区所在硬盘的存储驱动配置异常导致的,最为常见的一种情况就是没装驱动。回到电脑自带的Windows 11系统一看,SATA硬盘的控制器名称不是标准SATA AHCI控制器,而是两个Intel RST VMD开头的控制器,我就知道是intel又整新活了。既然已经明确了问题,那就好办了:缺少驱动,就安装驱动。

然而,事情并没有想象中的那么简单:诸如网卡声卡一类的驱动,不装也可以进系统,大不了不用这些功能;显卡驱动的话,不装也有兼容模式,可以在低效率的情况下仍然保持正常工作,又不是不能用。这两种情况都可以在进入系统之后再补驱动。然而,intel家的VMD就没有这种待遇了:不装驱动,连数据都读不出来。读不出系统数据,就进不了系统,更不用谈补驱动了。

然而,在寻找解决方案的时候,无意间发现了官方论坛的一个讨论贴,里面提到BIOS里竟然有隐藏选项可以禁用VMD控制器,转而使用标准的SATA控制器。该隐藏选项需要在Main选项卡(即第二个)中按组合键Ctrl+S召唤出来(稍微按久一点,最好至少1s左右,否则不会显示出来),禁用后重启就能够正常进入系统了。

折腾了这么久,终于可以让自己的系统在新电脑上启动了= =


你以为这就结束了?

作为富有探索精神的咱,可不会因为一点小小进展就满足,最终目标可是在开启VMD的情况下正常进入系统啊。

找了好久,终于在StackOverflow上看到有人有类似的需求,心想StackOverflow上的老哥向来是靠谱的,于是决定拿来一试,嘿,还真他娘的管用。

其原理是利用DISM强制向系统添加驱动,比在系统内用dpinstpnputil一类工具的效果不知道高到哪里去了。命令如下:

dism /Image:C:\ /Add-Driver /Driver:D:\ /Recurse

其中C盘替换成要装驱动的系统分区,D盘及其路径替换成驱动所在分区,如果不需要在子文件夹中搜索驱动的话可以去掉/Recurse选项。DISM命令可以跨系统使用,Windows 11给Windows 10装、Windows 10给Windows 8装,甚至x64系统给x86系统装都是没有问题的,只要保证驱动与目标系统是兼容的就行。输完命令,敲下回车后,程序会给出驱动的安装情况,不出意外的话VMD驱动会出现在其中。

此时重启,再进入要安装驱动的系统时,不会再蓝屏,而是进入类似SysPrep的驱动配置阶段,小圆点转个几圈过后,熟悉的锁屏界面又出现在了眼前。一个字,爽!

为什么要禁止呢?因为一方面,连接的是已知网络,登陆地址都快能背下来了;另一方面,我并未将常用浏览器设置为默认浏览器,所以每次一联网都要弹个新窗口出来,看着不爽= =

方法是修改注册表项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\EnableActiveProbing

设置为0就可以禁止自动弹出了。

而修改

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ActiveWebProbeHost

则可以在启用自动弹出登陆页面的时候,修改Windows用于检测连通性的网址。