工程目的
最近在研究图像生成,Stable Diffusion
的各种模型尤其3.5以后大的飞起来,动不动五六十G,以往上传到服务器费时费力占带宽又占存储空间,更关键的是用学校服务器只能校园网才能上,上传传个半天第二天来一看发现断联错误了,这时候模型重传又可能最后跑起来不完整,就想有没有一种方法能让服务器访问本地模型文件,但是代码又要用服务器的设备来跑呢?
首先参考了linux挂载远程目录,得知可以把Windows上的文件挂载到服务器上,但是照着操作了一同发现挂不上去。怀疑是网络问题,发现服务器ping
主机就ping
不通,这时候看了一下两台机器IP,本机是192.168
的私有地址,服务器是202
开头的公网IP,我们知道只能私网主动访问公网,公网设备不能主动访问私有地址,挂载等所有后续操作都是建立在二者能平等通信的基础上,所以该问题的解决应该分为两步:
1,内网穿透,让二者能平等通信。
2,实现文件目录挂载。
内网穿透
内网穿透其实就是为了解决计算机网络私有地址不能被外部用户访问的问题,要解决该问题其实很简单,有个有公网IP的中间者作转发就行了,二者要访问的数据通过该中间者传递,所以肯定是会有第三方提供该服务,比如远程连接,操作信息应该是用户发到平台,平台再予以转发的,所以这应该是一个相当成熟的技术,实现的具体手段也多种多样。
私有ip的目录怎么挂到公网IP的服务器上,AI时代确实给研究提速了,混元模型也挺好用,它给出的方案如下:
尝试的是ZeroTier
,官网在此,进入下载界面,分别下载Windows版和Linux版,
linux使用curl -s https://install.zerotier.com | sudo bash
自动完成下载及安装,
使用bing、微软或github登陆后,可见创建网络页面:
点击创建网络后可见网络页面,该网络id用于设备的加入:
windows版安装完没有窗口界面,在任务栏图标右键可见join new network
选项,点击后可见该提示框:
在该提示框中输入上面的网络id即可完成加入,Linux使用sudo zerotier-cli join 网络id
即可完成加入,加入后在管理界面给予授权即可获得私有IP:
此时两台机器可以通过私有IP互相ping
通,说明局域网已成。
文件目录挂载
前面折腾了半天,看了什么sshfs方法,不一定不好用,但是我照着操作之后报了暂时没法解决的错误,到最后其实只要一句话就能解决sudo mount -t cifs -o username="",password="" //ip/model文件目录 挂载目录
,有关参数详细解释可见访问共享文件夹的两种方法。
一条命令就把本地二百G的模型目录挂到服务器上了:
该方案能实现要有前提,Windows中开启共享,并给everyone
用户添加读取权限,如图:
此时在共享属性内有链接可直接到浏览器中访问,相同局域网下的用户也能访问。
总结
挂载上以后发现模型能跑,但是速度真的很慢:
说是预计六分钟,但是十分钟了还没动,如果在本地跑的话也就一分钟不到,实现以后回过头一想这个方案还是不行。以前受限于网络环境不好上传模型,现在直接调用模型不还是得被网络环境限制吗?现在一加载个模型直接把校园网干满了,而且速度这么慢会不会导致模型加载的其他问题。
总之就成果来看这是一次失败的尝试,并没有解决模型不方便的问题,但是就过程来看,本次思考和探究过程基本是很连贯的,虽然最后失败了但是也是一次积极的尝试,同时也了解了内网穿透和Linux的相关知识,还是有所收获的。