File size: 11,271 Bytes
0ae0e7b
 
 
 
 
 
 
 
 
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
bbbb83e
8f9724e
 
bbbb83e
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
 
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
 
 
0ae0e7b
8f9724e
 
 
 
0ae0e7b
8f9724e
 
0ae0e7b
8f9724e
 
 
0ae0e7b
8f9724e
bbbb83e
8f9724e
bbbb83e
8f9724e
0ae0e7b
8f9724e
 
 
 
0ae0e7b
8f9724e
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
 
0ae0e7b
8f9724e
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
 
8f9724e
 
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
 
 
 
 
 
0ae0e7b
 
8f9724e
 
0ae0e7b
 
8f9724e
 
 
 
 
 
 
 
 
 
0ae0e7b
8f9724e
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
 
8f9724e
 
 
 
 
 
 
 
 
 
 
0ae0e7b
 
8f9724e
 
 
0ae0e7b
 
8f9724e
 
 
 
 
 
 
 
 
 
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
 
 
 
 
 
0ae0e7b
8f9724e
0ae0e7b
 
 
 
8f9724e
 
0ae0e7b
 
 
 
 
 
 
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
 
 
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
 
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
 
8f9724e
 
 
 
0ae0e7b
8f9724e
 
 
 
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
 
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
0ae0e7b
8f9724e
0ae0e7b
8f9724e
88761a4
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
0ae0e7b
8f9724e
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
---
license: agpl-3.0
language:
- en
- zh
pipeline_tag: zero-shot-image-classification
tags:
- immich
---

# 一、项目简介

Immich 是一款支持本地 AI 检索与多端备份的开源自托管智能相册。将其深度适配并独立部署在 AX650 边缘算力板卡上,可让所有照片数据与 AI 推理均在本地物理隔离运行,从而实现100%的数据主权与最高级别的隐私安全保障。

**原项目官方资源:**

- 官方网站:https://immich.app/
- GitHub 仓库:https://github.com/immich-app/immich

本项目的目标是演示如何在AX650开发平台上部署 Immich,部署后可直接使用**AX650板卡**,或者外接 **AX650 AI 算力卡** 进行使用。

# 二、参考链接

我们已将针对 Immich 代码库的修改版本在 GitHub 上开源,目前版本对齐immich最新版本v2.7.5:

- **开源仓库**:https://github.com/AXERA-TECH/immich/tree/ax650-v2.7.5

# 三、支持平台

- **AX650 / AX8850**
    - **AX650N DEMO Board**
    - [M4N-Dock(爱芯派Pro)](https://wiki.sipeed.com/hardware/zh/maixIV/m4ndock/m4ndock.html)
    - [**M.2 Accelerator card**](https://axcl-docs.readthedocs.io/zh-cn/latest/doc_introduction.html#id4)

# 四、支持模型

在 Immich 项目中,CLIP 模型是实现智能相册功能且计算需求最高的核心组件。为了进一步提升识别准确率,我们采用了参数量更大的模型:**CLIP-L/14-336****CN-CLIP-L/14-336**。

针对爱芯元智(Axera)AI 加速卡优化后的预编译模型,可参考以下版本获取:

- [**CLIP-L/14-336 (English)**](https://huggingface.co/AXERA-TECH/ViT-L-14-336__axera)
- [**CN-CLIP-L/14-336 (Chinese)**](https://huggingface.co/AXERA-TECH/ViT-L-14-336-CN__axera)
# 五、部署操作

## **1. 系统配置与代码获取**

### (1)前置准备与依赖安装(必做)

在开始部署前,必须更新系统并安装核心依赖组件。
```bash
apt-get update
apt-get install -y unzip libgl1
```

### **扩充存储空间(可选)**
- **挂载 SD Card**:若系统内部空间不够,可选择挂载 SD Card 来存放数据。首先需将 SD Card 格式化为 `ext4` 格式并挂载。
```bash
lsblk

#格式化SD Card 注意保存数据
# mkfs.ext4 /dev/mmcblk1p1

mkdir /mnt/sdcard
mount /dev/mmcblk1p1 /mnt/sdcard
```

- **配置开机自动挂载**:通过 `blkid /dev/mmcblk1p1` 获取 UUID 后,修改 `/etc/fstab` 文件以实现开机自启。配置示例如 `UUID=13054439-9d76-47ca-b8ed-c7cd8d208a5d /mnt/sdcard ext4 defaults 0 2`### (3) 获取部署代码(必做)

- **方案一:使用 Git**:安装 `git-lfs` 后,直接从 HuggingFace 拉取代码仓库(空间不足时可选择拉取至 SD Card 目录)。

```bash
apt-get install git-lfs
git clone https://huggingface.co/AXERA-TECH/immich
```

- **方案二:使用 HuggingFace**:若 Git 因为网络问题导致拉取失败,可安装 `huggingface_hub` 工具并使用 `hf download` 进行本地下载。

```bash
apt-get install -y python3.11

#若无法直接访问 可使用国内代理
export HF_ENDPOINT=https://hf-mirror.com

pip install -U huggingface_hub
hf download AXERA-TECH/immich --local-dir .
```

## 2. Docker 服务部署

### (1) 解压配置文件(必做)

- 进入拉取的 `immich` 代码目录,解压部署文件并创建 `.env` 环境变量文件。

```bash
cd immich
unzip -o docker-deploy.zip
cp example.env .env
```

### (2)Docker 环境配置(可选)

- **修改数据目录**:若内部空间不够,可修改 Docker 镜像路径至 SD Card。创建 `/mnt/sdcard/docker_data` 目录后,修改 `/lib/systemd/system/docker.service`,在 `ExecStart` 后面添加 `-data-root=/mnt/sdcard/docker_data` 并重启服务。请务必确保 SD Card 已配置开机自动挂载。
- **设置 Docker 代理**:若由于网络问题无法访问外部镜像,可为 Docker 添加 HTTP/HTTPS 代理配置(写入 `/etc/systemd/system/docker.service.d/http-proxy.conf` 并重启服务)或直接改用国内镜像源。

### (3)导入并启动镜像(必做)

- 加载离线 Docker 镜像包,并使用 Docker Compose 启动容器服务。

```bash
docker load -i ax-immich-server-aarch64.tar.gz
docker compose -f docker-compose.yml -f docker-compose.override.yml up -d
```

- 可通过 `docker ps` 查看容器状态。若长时间处于 "starting" 状态,建议使用 `docker logs immich_server --tail 20` 等命令排查启动日志。
- 启动正常后,通过浏览器访问 `http://<开发板IP>:2283` 即可进入网页端进行注册和登录。

![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/d8BRCXOlN5j7ZCrtf8XB9.png)
## 3. 机器学习 (ML) 服务部署

### (1)配置 Python 虚拟环境(可选)

- 若主存储空间不够,可安装 `python3.11-venv` 并在 SD Card 上创建虚拟环境 `/mnt/sdcard/immich_venv` 以节省空间。

```bash
apt-get install -y python3.11-venv
python3.11 -m venv /mnt/sdcard/immich_venv
```

### (2)安装 ML 依赖包(必做)

- 可根据自身情况选择直接**全局安装**或进入**虚拟环境安装**(二选一),建议使用虚拟环境。

**全局安装:**

```bash
#注意安装py 3.11版本(v2.7.5 immich官方指定)
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11

# 安装依赖
pip install -r requirements.txt

#建议选择PyAXEngine最新版本 当前最新0.1.3.rc3
pip install https://github.com/AXERA-TECH/pyaxengine/releases/download/0.1.3.rc3/axengine-0.1.3-py3-none-any.whl

#安装Wheel包
pip install immich_ml-2.7.5-py3-none-any.whl
```

**虚拟环境安装**

为了避免存储不够,安装时可通过 `TMPDIR``-cache-dir` 参数将临时文件与缓存放到 SD Card 上。

```bash
# 激活虚拟环境(若使用了venv)
source /mnt/sdcard/immich_venv/bin/activate

# 安装依赖
TMPDIR=/mnt/sdcard pip install -r requirements.txt --cache-dir /mnt/sdcard/.pip_cache

#建议选择PyAXEngine最新版本 当前最新0.1.3.rc3
TMPDIR=/mnt/sdcard pip install https://github.com/AXERA-TECH/pyaxengine/releases/download/0.1.3.rc3/axengine-0.1.3-py3-none-any.whl --cache-dir /mnt/sdcard/.pip_cache

#安装Wheel包
TMPDIR=/mnt/sdcard pip install immich_ml-2.7.5-py3-none-any.whl --cache-dir /mnt/sdcard/.pip_cache
```

PyAXEngine最新版本获取:[**PyAXEngine GitHub**](https://github.com/AXERA-TECH/pyaxengine)

### (3) 启动 ML 服务(必做)

- **算力卡检测**:若需要使用算力卡,通过指令 axcl-smi 确定算力卡是否正常,可见类似输出:

```bash
root@ax650:/opt/bin/axcl# ./axcl-smi
+------------------------------------------------------------------------------------------------+
| AXCL-SMI  V3.15.0_20260609020154                                Driver  V3.15.0_20260609020154 |
+-----------------------------------------+--------------+---------------------------------------+
| Card  Name                     Firmware | Bus-Id       |                          Memory-Usage |
| Fan   Temp                Pwr:Usage/Cap | CPU      NPU |                             CMM-Usage |
|=========================================+==============+=======================================|
|    0  AX8850                    V3.15.0 | 0001:81:00.0 |                148 MiB /      945 MiB |
|   --   39C                      -- / -- | 1%        0% |                 18 MiB /     7040 MiB |
+-----------------------------------------+--------------+---------------------------------------+

+------------------------------------------------------------------------------------------------+
| Processes:                                                                                     |
| Card      PID  Process Name                                                   NPU Memory Usage |
|================================================================================================|
```

- **启动immich_ml服务**:激活对应的 Python 环境,配置主机与端口信息后启动 `immich_ml` 服务(若使用虚拟环境需要注意是否处于虚拟环境中)。

**标准启动:**

```bash
IMMICH_HOST=0.0.0.0 IMMICH_PORT=3003 python -m immich_ml
```

**指定缓存目录启动方式(推荐空间不足者使用):**

若需进一步节省根分区空间,可指定 `MACHINE_LEARNING_CACHE_FOLDER``HF_HOME` 环境变量将模型缓存存放至 SD Card。

```bash
mkdir -p /mnt/sdcard/immich_ml_cache /mnt/sdcard/huggingface
MACHINE_LEARNING_CACHE_FOLDER=/mnt/sdcard/immich_ml_cache HF_HOME=/mnt/sdcard/huggingface IMMICH_HOST=0.0.0.0 IMMICH_PORT=3003 python -m immich_ml
```

**使用本地模型启动(推荐网络无法访问者使用):**

immich在启动ml服务时,会通过网络检测有无模型更新需求,若无法访问网络,可以获取模型后使用本地模型启动。

如若使用[**CN-CLIP-L/14-336 (Chinese)**](https://huggingface.co/AXERA-TECH/ViT-L-14-336-CN__axera)模型,拉取模型放到模型目录(实际目录可根据immich_ml日志进行查看),可能目录如下:

```bash
#采用标准启动,可能路径为:
/root/.cache/immich_ml/clip/ViT-L-14-336-CN__axera
 
#指定目录启动,根据目录路径进行查找,比如:
/mnt/sdcard/immich_ml_cache/clip/ViT-L-14-336-CN__axera
```

指定 `HF_HUB_OFFLINE=1` 进行启动,如:

```bash
HF_HUB_OFFLINE=1 IMMICH_HOST=0.0.0.0 IMMICH_PORT=3003 python -m immich_ml
```

## 4. 功能验证与设置

### **(1)查询网关 IP**

在宿主机通过命令 `docker network inspect immich_default | grep Gate` 查看 IP(通常类似于 `172.19.0.1`)。

### **(2)配置 ML 服务**


登录 Immich **网页端**,点击左上角**头像**,选择**Administration**,进入**设置**,选择**机器学习设置**,配置上一步获取到的 IP,并填写模型,如填为`ViT-L-14-336-CN__axera`。

![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/77IMPafinxzYWfhYjsJkU.png)
### **(3)上传与测试**

- 在网页端上传图片
- 创建智能搜索任务
- 任务处理完毕后,执行智能搜索以验证 ML 服务是否正常解析图像特征。
  

![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/P9TVpPWFOW62O5zUrH27K.png)

![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/HrcRSzh7o5lPnlQbtcaaa.png)


![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/KwegGQkRcRYkYaBX9Vb21.png)

### (4)APP测试

- 下载app,并使手机在同一网络环境下
- 填写ip和账号密码进入
- 进行智能搜索

![image](https://cdn-uploads.huggingface.co/production/uploads/6a2ba64ddd73738eacc6ef57/nlsUEPdd6eSynshNTFr9V.png)

# 六、性能评估

在当前测试场景下,Immich 服务由 Docker 中的 `server/postgres/redis` 与宿主机 `immich_ml` 组成。由于模型懒加载、运行时缓存、数据库缓存以及AX CMM 分配策略等因素,MEM与 CMM 占用会受操作影响。

AX650板卡采用 `AxEngineExecutionProvider`,处理182张图片。

智能搜索任务处理期间观察到的资源占用峰值约为:

- CPU:整机总 CPU 约 5%~6%
- MEM:约 1.5~1.6 GiB
- CMM:约 600 MiB