沙丘猫窝

沙丘猫窝 - SrakhiuMeow

最近在学上海话,上海话的入声韵虽然比较简单,但是一个一个背还是麻烦。通过普通话来推断入声字的读法不够全面,而通过广州话读法加上普通话辅助的话能够较为简单地推断出上海话中入声字的读音。具体的对应关系如表所示:

广州 上海 备注
-aak -ah(-eh) -eh为文读
-aat/-aap -iaeh 普通话-ia(不含ya)
-aeh 普通话-a
-waak -uah 普通话-ua
-oh 普通话-uo
-waat -uaeh
-ak -eh
-ap/-at -ih 普通话-i且非翘舌声母
-eh 普通话-e/-o/-u或声母为翘舌/f-
-wat -ueh 普通话-u
-iuh 普通话-ü/-üe
-uk -oh 普通话-u
-ioh 普通话-ü
-ot -eh
-ut
-ok/-wok -oh
-iah “乐”(yue)
-yut -iuh 团声字
-ih 尖声字(且平舌)
-eh 其他
-ik/-it/-ip -eh 普通话声母翘舌
-iaeh 普通话-ia及“捏挟”等字
-ih 其他及“吃”字
-oek -iah
-eot -ih 声母l-
-eh 其他
-ek -ah(-eh) 普通话声母翘舌
(-eh为文读)
-ih 其他

顺带一提,一开始看网上说“麦袜之别”(-ah/-aeh)的文章时被里头的说明搞糊涂了,自己用广州话念了下例字才发现麦袜之别就是-aak与-aap/-aat的区别……

在Linux Mint下,用VLC打开视频后点击播放按钮后很快就会崩溃闪退,重装VLC也没有效果。Linux Mint自带的播放器虽然可用,但是有时打开多个播放器时关掉一个其他的也会崩溃。

使用debug模式结果如下

1
2
3
4
5
6
7
8
VLC media player 3.0.20 Vetinari (revision 3.0.20-0-g6f0d0ab126b)
[0000566ab552f560] main libvlc: 正在以默认界面运行 vlc。使用“cvlc”可以无界面模式使用 vlc。
[0000566ab55d4030] main playlist: playlist is empty
libva info: VA-API version 1.20.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
[1] 27636 segmentation fault (core dumped) vlc

发现原来是驱动问题。之前鼓捣的时候手动装了AMD闭源驱动,这个驱动会导致各种问题。

卸载掉问题就消失了。

1
2
# 卸载AMD闭源驱动
amdgpu-uninstall

再打开VLC,一切正常。

实验室一台Ubuntu机器最近经常出现“输入/输出错误”,无法正常使用,连正常关机都不行。

强制重启后提示要手动fsck

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/dev/sdb6: recovering journal
/dev/sdb6 contains a file system with errors, check forced.
Inode 7350190, i_blocks is 212832, should be 212824. FIXED.
Unattached inode 7354055

/dev/sdb6: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
fsck exited with status code 4
The root filesystem on /dev/sdb6 requires a manual fsck

BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3.1) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs) _

按照提示,需要对/dev/sdb6进行手动修复。执行

1
2
fsck -y /dev/sdb6 # 注意/dev/sdb6要更换成你的电脑提示需要手动fsck的对应驱动器
exit

即可修复错误,并进入系统。

然而,之后系统开机一段时间后还会出现“输入/输出错误”的问题。最终,在PE系统下使用DiskGenius对整块硬盘进行坏块检测并修复后再也没有出现类似错误。

使用MMAction2时,使用最新的2.2.0版本的MMCV会报错,例如:

1
2
3
4
5
6
7
8
/root/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmengine/optim/optimizer/zero_optimizer.py:11: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead.
from torch.distributed.optim import \
Traceback (most recent call last):
File "tools/train.py", line 9, in <module>
from mmaction.registry import RUNNERS
File "/root/autodl-tmp/mmaction2/mmaction/__init__.py", line 16, in <module>
assert (digit_version(mmcv_minimum_version) <= mmcv_version
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.

由于在该主机上安装低版本MMCV的编译过程会卡死,所以这里直接修改mmaction2/mmaction/init.py文件,将其中的mmcv_maximum_version一项改为如下所示:

1
mmcv_maximum_version = '2.2.1'

此时再运行MMAction2就不会报错了。

在Linux Mint系统中使用自带的“文档扫描仪”应用时,可能提示“扫描仪通信失败”,无法扫描文件。

要解决这个问题,在终端中执行

1
2
sudo systemctl stop saned saned.socket
sudo systemctl start saned.socket

即可

查看XPU占用

想要查看XPU的占用率与显存情况,可以用xpu-smi

类似于N卡的nvidia-smi,这个指令能够显示XPU的占用情况,输出结果例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+---------------------------------------------------------------------------------------+
| XPU-SMI Driver Version: 5.0.21.21 XPU-RT Version: 5.0.21 |
|-------------------------------+-----------------------+-------------------------------|
| XPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | XPU-Util Compute M. |
| | L3-Usage | SR-IOV M. |
|===============================+=======================+===============================|
| 0 P800 OAM N/A | 00000000:A3:00.0 N/A | 0 |
| N/A 46C N/A 117W / 400W| 47250MiB / 98304MiB | 1% Default |
| | 4MiB / 96MiB | Disabled |
+-------------------------------+-----------------------+-------------------------------+

+---------------------------------------------------------------------------------------+
| Processes: |
| XPU XI CI PID Type Process name XPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 2118 C 21528MiB |
| 0 N/A N/A 3161 C /usr/bin/python 25726MiB |
+---------------------------------------------------------------------------------------+

如果想要终止某个程序,利用kill杀掉对应进程即可

1
2
kill -9 要终止的任务的PID
# 如 kill -9 3161

显存不释放

有的时候,程序明明退出了,且在xpu-smi中也看不到对应进程,但是显存依然被占用,不能被自动释放。此时需要利用lsof指令找到所有占用XPU的进程,再手动全部终止。

在终端中输入:

1
lsof /dev/xpu*

可以看到哪些应用在占用XPU

1
2
3
4
5
6
COMMAND  PID   USER   FD    TYPE  DEVICE  SIZE/OFF  NODE  NAME
python 2801 bml mem CHR 195, 255 943 /dev/xpuctrl
python 2801 bml mem CHR 195, 6 1724 /dev/xpu6
python 2801 bml 3u CHR 195, 255 0t0 943 /dev/xpuctrl
python 2801 bml 4u CHR 195, 6 0t0 1724 /dev/xpu6
......

其中COMMAND下的为程序名,一般用kill终止掉其中所有python后就能释放显存。

在确认本机无其他人用XPU的情况下也可以用

1
lsof -t /dev/xpu* | sargs -r kill -9

终止所有占用XPU的应用。

Dataloader报错

在训练过程中可能遇到Dataloader环节报错,比如

1
2
3
4
5
6
7
8
9
10
11
12
13
Traceback (most recent call last):
File "xxx/PaddleYOLO-example/tools/train.py", line 202, in <module>
main()
File "xxx/PaddleYOLO-example/tools/train.py", line 198, in main
run(FLAGS, cfg)
File "xxx/PaddleYOLO-example/tools/train.py", line 151, in run
trainer.train(FLAGS.eval)
File "xxx/PaddleYOLO-example/ppdet/engine/trainer.py", line 496, in train
for step_id, data in enumerate(self.loader):
File "/usr/local/lib/python3.10/dist-packages/paddle/io/dataloader/dataloader_iter.py", line 850, in __next__
self._reader.read_next_list()[0]
SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception.
[Hint: Expected killed_ != true, but received killed_:1 == true:1.] (at /host/Paddle/paddle/phi/core/operators/reader/blocking_queue.h:175)

可能的原因有三种,一是worker_num太高导致内存不足,适当调低即可。训练时可以用另一个终端,执行watch top来监控系统内存占用情况。

二是kill掉训练进程时,Dataloader进程没被一起结束掉,此时可以用lsof来查询所有Dataloader并kill掉

1
lsof +D 数据集所在目录

三是输入图片的尺寸太大。此时需要对数据集进行预处理,缩小图像尺寸并修改对应的标注。

查看训练程序是哪个用户执行的

一台机器多人公用时,要避免总结掉别人执行的程序,可以用xpi-smi查看程序对应的路径。但是有些时候xpi-smi只显示python,此时可以用ls查看该进程详细情况。

1
2
# XXXX改为对应程序的PID
ll /proc/XXXX | grep 'cwd\|exe'

得到的输出中,cwd最后面为执行程序时所在的路径,exe最后面为程序的路径。根据这些信息即可判断训练程序是哪个用户执行的。

1
2
lrwxrwxrwx  1 xxx xxx  0  4月 22 17:46 cwd -> xxx/sample
lrwxrwxrwx 1 xxx xxx 0 4月 22 17:01 exe -> xxx/miniconda3/envs/pcp/bin/python3.10

Windows11新增的实时字幕功能十分实用,能在离线的状态下转写多种语言。在首次启动时,实时字幕会自动下载语音包(Speech Pack),然而由于一些网络原因下载可能出错,导致一直卡在“设置实时字幕”的进度条上。

image.png

自动下载失败,我们还可以手动安装Speech Pack。

网上部分教程说可以通过微软商店解决,但是现在打开Microsoft Store搜索Speech Pack是搜索不到的,并不能找到下载地址。

事实上,我们可以从微软官方支持网站手动下载对应语言的Speech Pack:

https://support.microsoft.com/zh-cn/windows/排查实时字幕或语音访问设置问题-4adeb98b-9d74-4559-8bc9-3aa05903f0f9#store_packages

在“存储包”中选择对应的“应用商店包”,例如要安装简体中文字幕就点后面的“Speech.zh-CN.1.zip”

列表

下载得到zip文件,解压后打开其中后缀为msix的安装包,点击“安装”

安装

安装完成之后,再打开实时字幕即可正常使用

有些单位的电脑禁止连接外网,又需要安装一套Python环境。此时不能再直接在内网机器安装python,pip和库包,可以在能连接外网的机器上打包制做一套运行环境拷贝过去运行。

本文将说明如何给Windows电脑离线安装环境,以及如何为已经有Python环境的内网电脑安装新的Python库包。

离线安装Python环境(Windows)

下载Python Embed版本

在能够访问外网的电脑上,从https://www.python.org/downloads/windows/下载对应Python embed版本(如果要下载64位的,就选择“Download Windows embeddable package (64-bit)”),并将其解压即可。

再搜索解压后目录内的pythonXXX._pth (其中XXX为python版本)

将其中#import site前面的#号(注释标记)删除掉,更改后应该类似这样:

1
2
3
4
5
python313.zip
.

# Uncomment to run site.main() automatically
import site

安装pip

https://bootstrap.pypa.io/get-pip.py下载get-pip.py,并将其复制到Python Embed所在的目录中

在该目录内打开终端或者cmd,用如下指令安装pip

1
./python get-pip.py

安装库包

此时,即可使用pip安装需要的包

1
./python -m pip install <包名> -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

也可以将需要的包写在requirements.txt内,使用-r参数安装

1
./python -m pip install -r requirements -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

最后,将整个文件夹打包复制到对应机器上解压即可使用

1
2
cd <解压后python所在路经>
./python.exe

离线安装Python库包

如果内网电脑上面已经有了环境,还想要增加某个Python库包该怎么做呢?可以在另一台电脑上,用pip将该包及其依赖下载下来。(不推荐使用PyPI,因为不能下载依赖。)

在联网机器上,使用pip download可以将某个软件包及其所有的依赖包下载下来

1
2
3
4
5
6
7
python -m pip download <包名> \
--platform win_amd64 \ # Windows 64位
--python-version 312 \ # Python 3.12
--implementation cp \ # CPython
--only-binary=:all: \ # 仅下载二进制包(避免源码编译)
-i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple # 使用国内镜像源加速
-d ./wheelhouse # 保存到指定目录

参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

| | 32位 | 64位 | ARM64位 |
| --- | --- | --- | --- |
| Windows | win32 | win_amd64 | win_arm64 |
| Linux | linux_i386 | linux_x86_64 | |

如果不确定目标机器的平台,可以进入对应python后使用distutils.util.get_platform() 查询

```bash
❯ ./python
Python 3.13.5 | packaged by Anaconda, Inc. | (main, Jun 12 2025, 16:09:02) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils
>>> distutils.util.get_platform()
'linux-x86_64' # 说明平台为linux-x86_64

--python-version后面应当指定版本

-d 后面指定软件包下载的位置

同样的可以可以使用-r requirements.txt来代替手动指定软件包

将wheelhouse完整拷贝至目标机器,再使用pip即可安装所需要的软件包

0%