TCP/IP TIME_WAIT状态原理

TIME_WAIT状态原理

----------------------------

通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。

客户端主动关闭连接时,会发送最后一个ACK后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。

继续阅读TCP/IP TIME_WAIT状态原理

Python HttpServer服务器

参考链接


Visual Studio Code调试时报错"raise RuntimeError('already started')"

Visual Studio Code远程调试pytorch模型训练时,报错如下:

解决办法,在.py文件头添加如下语句:

更新:
如果你的工程是基于pytorch的,那么检查自己的dataLoader,是否使用了num_workers参数。当使用该参数时,可能会报上述错误。解决办法是将num_workers设置为0

参考链接


vscode调试时报错raise RuntimeError('already started')

Windows系统盘符错乱导致桌面无法加载

 系统:Windows 7

 问题:

ubuntu 18.04 系统上,使用 gparted 调整 Windows 7 系统分区大小之后,开机登陆用户,桌面无法显示,屏幕黑屏或者蓝色空白。

屏幕右下角显示:

按下 Ctrl+Shift+DEL 能打开任务管理器,但右击相关进程属性发现所有的系统应用显示为 E: 盘,可以确定是盘符错乱导致无法正常加载系统文件及和户配置。

 解决方法:

用U盘PE启动,命令行中执行 regist32.exe,定位到 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices,复制 \DosDevices\C: 的值,这个值有长有短,但只要硬盘不变,分区不变,PE下得到的值和硬盘系统的值是一样的,可以直接复制过来用。

将光标定位在 HKEY_LOCAL_MACHINE 上,文件菜单或右键菜单上就可以有 加载配置单元 ,到硬盘系统中注册表保存位置,C:\Windows\System32\config 中,选择注册表文件 SYSTEM ,在弹出的框中输入一个 项名字(名字可以随意取),如 TEST,然后 HKEY_LOCAL_MACHINE 下就会新增一个 TEST 节点,加载刚才选择的 SYSTEM 的配置。定位到 MountedDevices,找到对应的 \DosDevices\C:,把刚才复制的值粘贴过去。

重新启动系统。

参考链接


ubuntu 18.04上使用Openconnect代替Cisco Anyconnect

OpenConnect 是一个 Cisco Anyconnect 的替代品,具有开源、易获取、可靠等优点。而官方版本的 Cisco Anyconnect 配置较为繁琐,需要在管理界面同时部署多平台客户端才能支持多平台。相比之下 OpenConnect 在这点就具有优势,可以在官方版本无法跨平台时替代使用。

命令行模式:

安装完成之后,在网络管理界面上的 VPN 设置界面上可以配置 Cisco Anyconnect 相关的项目。

如果刚刚安装之后, VPN 设置界面上没有出现这个选项,则可能需要重启系统才行。

参考链接


pytorch 1.0.1在ubuntu 18.04(Lenveo Thinkpad T440)编译(CUDA-9.1.85)

目前由于 CUDA-9.1.85 已经不支持 Femi 架构了。

因此如下参数:,

会导致全部的 .cu 文件会全部编译失败,我们只能是从 CUDA-8.x 上进行编译。

老老实实装一个 ubuntu 16.04 编译吧,实体机或者 nvidia-docker ,都可以试试。

目前 ubuntu 18.04 上使用 sudo  apt-get install nvidia-cuda-toolkit 安装的是 9.1.85 版本的 nvidia cuda , 尽管版本比较老,但是好在稳定性好,适用范围广。

当我们的项目需要使用指定版本的 pytorch 的时候,目前官方提供的编译好的 nvidia cuda 安装包并不兼容全部的硬件。这个在实际环境中是比较麻烦的。

目前来说,比较稳妥的办法是直接从源代码编译。

如果显卡是几年前的显卡(GeForce GTX 760  Compute Capability = 3.0 / GeForce GT 720M  Lenveo Thinkpad T440 Compute Capability = 2.1),运行的时候会提示:

执行的时候会报错

硬件的计算能力查询 Recommended GPU for Developers

------------------------------------------------------------------------------------

安装官方软件源的 cuda-9.1.85, 高版本的显卡驱动不支持:

如果安装时报错,如下:

并且 sudo apt --fix-broken install无效,则执行强制包清除命令:

Lenveo T440 Compute Capability = 2.1 不支持 cuDNN ,因此没必要安装 , 其实连最新版本的 CUDA-10.1 也不能安装,原因在于 NVIDIA GT 720M 的驱动只支持到 390 版本,而 CUDA-10.1418 以上的版本才能支持,具体表现在于系统启动后没有加载显卡驱动,dmesg 可以查看到如下信息:

------------------------------------------------------------------------------------

切换 GCC 版本到 GCC-5

------------------------------------------------------------------------------------

依旧是推荐在 Anaconda 上建立独立的编译环境,然后执行编译:

如果出现如下错误:

则需要调整代码 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu, 在其中的 cusparseGetErrorString 函数上增加 #if (!((CUSPARSE_VER_MAJOR >= 10) && (CUSPARSE_VER_MINOR >= 2)))

如下:

这样解决跟 CUDA-10.1自带函数的冲突问题。

具体参考: https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu

源码安装的Pytorch,卸载需要执行:

Pytorch 代码下载非常缓慢,可以本站下载同步好的pytorch源代码

参考链接


在ubuntu 18.04(GeForce GTX 760 4GB显存)编译/测试MaskTextSpotter(CUDA-10.1)

如果需要运行 MaskTextSpotter, 最少需要 4GB 显存,低于这个容量,运行不起来。

安装最新版本的 cuda-10.1,低版本的编译会出问题:

配置独立环境

编译安装 Pytoch

如果出现如下错误:

则需要调整代码 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu, 在其中的 cusparseGetErrorString 函数上增加 #if (!((CUSPARSE_VER_MAJOR >= 10) && (CUSPARSE_VER_MINOR >= 2)))

如下:

这样解决跟 CUDA-10.1自带函数的冲突问题。

具体参考: https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu

编译安装 TorchVision

源代码编译

准备测试数据

执行测试的时候,如果出现如下错误信息:

那么问题出现的原因是maskrcnn_benchmark/data/datasets/icdar.py解析文件的时候,遇到了478,239,511,241,511,255,478,253,$5,000这样的数据,测试代码如下:

修正后的代码如下:

其他错误,可能是中途软件安装卸载造成的软件版本冲突,则直接删除环境,重新创建一个干净的环境重新构建。 

参考链接


ubuntu 18.04 Android Studio运行模拟器时提示“/dev/kvm device: permission denied”

升级 ubuntu 系统, 从 16.04.5 升级到 18.04.1 ,接着又开始配置各种软件环境。

当配置好 Android 开发环境,准备创建一个模拟器并运行程序环境看是否OK时,问题出现了。

创建和运行时都提示:/dev/kvm device: permission denied 或者 /dev/kvm device: open failed,而且模拟器跑不起来。

执行命令查看:

需要安装 qemu-kvm 并把当前用户加入到 kvm 用户组即可:

然后运行模拟器。

如果依旧报错,则需要修改 /dev/kvm 的所有者为当前用户,如下:

参考链接