安装部署说明
<h1>人脸服务安装部署</h1>
<p>该部署文档基于基础docker容器服务环境,本文档不涉及容器环境的安装流程;
其他容器平台(如K8S)的安装部署,后续补充;</p>
<h2>1.所需服务模块</h2>
<p><b>当前罗列为开发测试阶段对接模块,项目上如果有特殊需要,需要进行具体的测试</b></p>
<table>
<thead>
<tr>
<th>服务</th>
<th>版本</th>
<th>镜像包</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>ElesticSearch</td>
<td>8.7.0</td>
<td>10.0.104.10/dayang/elasticsearch:patch_8.7.0</td>
<td>支持其他版本,最好8.x之后的版本</td>
</tr>
<tr>
<td>Redis</td>
<td>5.x\6.x</td>
<td>10.0.104.10/dayang/redis:20210126</td>
<td>服务内部集成了redis服务,也可以使用项目上其他的redis</td>
</tr>
<tr>
<td>dyfaceid</td>
<td>20240903</td>
<td>10.0.104.4/dayang/dy_faceid:20240903</td>
<td>人脸向量提取服务,研究院更新维护</td>
</tr>
<tr>
<td>lvfaceservice</td>
<td>0.7.0</td>
<td>10.0.104.4/lv/lv-face-service:0.7.0_20241018</td>
<td>人脸服务-随时更新</td>
</tr>
</tbody>
</table>
<h3>1.1 ES部署</h3>
<h4>1.1.1单机部署</h4>
<pre><code>1.创建专有网络
docker network create lvesnet
2.创建数据持久化目录(重要:可以尝试SSD)
//数据目录(根目录不是必须为/mnt)
mkdir /mnt/es-data
chown -R dayang:dayang /mnt/es-data
//日志目录(根目录不是必须为/mnt)
mkdir /mnt/es-log
chown -R dayang:dayang /mnt/es-log
3.运行服务
docker run -itd --name lv-es --privileged --net lvesnet -e &quot;ES_JAVA_OPTS=-Xms512m -Xmx512m&quot; -v /mnt/es-data:/usr/share/elasticsearch/data -v /mnt/es-logs:/usr/share/elasticsearch/logs -p 9200:9200 -p 9300:9300 -e &quot;discovery.type=single-node&quot; -e &quot;xpack.security.enabled=false&quot; 10.0.104.10/dayang/elasticsearch:patch_8.7.0
4.验证服务
在浏览器中访问: http://ip:9200 ; 能够正常返回服务信息(如版本号)即可</code></pre>
<h4>1.1.2集群部署(待补充)</h4>
<h3>1.2 Redis部署</h3>
<h4>1.2.1 使用服务自带服务(建议)</h4>
<pre><code>无需安装</code></pre>
<h4>1.2.1 使用外设服务</h4>
<pre><code>待补充</code></pre>
<h3>1.3 dyfaceid服务部署</h3>
<h4>1.3.1 单点部署</h4>
<pre><code>1. 准备CUDA环境
* cuda版本&gt;=12.1,对主机操作系统没有特别要求,建议使用较新版本的主机操作系统
* 如RTX 6000显卡, GPU显存占用约3.0GB
2. 单点部署:
* GPU环境:
docker run -d --gpus all --name dy_faceid --restart unless-stopped -p 8080:8080 -e Face_DownloadPath=/data_face/download -e Face_RltPath=/data_face/rlt -e WORKER_TASK_CONCURRENCY=1 10.0.104.4/dayang/dy_faceid:20240903
* 非GPU环境(去掉—gpus相关选项):
docker run -d --name dy_faceid --restart unless-stopped -p 8080:8080 -e Face_DownloadPath=/data_face/download -e Face_RltPath=/data_face/rlt -e WORKER_TASK_CONCURRENCY=1 10.0.104.4/dayang/dy_faceid:20240903
3. 注意事项
* http下载和结果json文件路径:
默认使用容器内部的/data_face/download目录作为http文件的下载路径,使用/data_face/rlt作为结果json文件保存路径,可以通过环境变量修改。如果多机部署,需要进行路径映射,设置上面/data_face路径为共享路径
* WORKER_TASK_CONCURRENCY环境变量控制执行asr worker的并发数量,显存占用与并发数量成正比。
* --gpus all: 设置使用全部gpu;要制定使用某个或某些gpu,参考下面例子:
--gpus &#039;&quot;device=0&quot;&#039;
--gpus &#039;&quot;device=1&quot;&#039;
--gpus &#039;&quot;device=1,2&quot;&#039;
--gpus all
细节参考:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html#gpu-enumeration
* 其他:
镜像中的os版本比较新(Ubuntu 22),如果主机OS比较老(如主机系统是Ubuntu 16),创建容器时可能报创建线程相关错误,此时在docker run中加上下面选项:
--security-opt seccomp=unconfined</code></pre>
<h4>1.3.2 多节点部署</h4>
<pre><code>1. 多节点部署时,需要共享存储保存结果文件
2. 并且需要有一个节点中的redis作为共享redis,或者使用外部共享redis:
3. 假设主机中的共享存储为/host/face_data
4. 主节点创建:
docker run -d --gpus all --name dy_faceid_01 --restart unless-stopped -p 8080:8080 -p 6379:6379 -v /host/face_data/:/data_face/ -e Face_DownloadPath=/data_face/download -e Face_RltPath=/data_face/rlt -e WORKER_TASK_CONCURRENCY=1 10.0.104.4/dayang/dy_faceid:20240903
注意:
* 增加了redis端口映射,容器内部redis端口固定是6379,前面的主机映射端口可以是其他值。
* 增加了/data_face路径映射,保存结果文件
5. 其他节点创建,假设主节点ip为 ip_01:
docker run -d --gpus all --name dy_faceid_02 --restart unless-stopped -p 8080:8080 -v /host/face_data/:/data_face/ -e Face_DownloadPath=/data_face/download -e Face_RltPath=/data_face/rlt -e WORKER_TASK_CONCURRENCY=1 -e REDIS_HOST= ip_01 -e REDIS_PORT=6379 -e REDIS_PSD=dyprog_sim -e START_REDIS=false 10.0.104.4/dayang/dy_faceid:20240903
注意:
* 增加了/data_face路径映射,保存结果文件
* 增加了redis相关环境变量,使用dy_faceid_01节点中的redis。
* -e START_REDIS=false: 设置其他节点不启动redis</code></pre>
<h3>1.4 lvfaceservice服务部署</h3>
<pre><code>1. 服务部署
docker run -itd --name lvface -p 20060:20060 -v /mnt/lvface/config:/LVFaceService/config 10.0.104.10/lv/lv-face-service:0.7.0_20241018
2. 参数说明
{
//服务对外发布结果地址
//可以是IP:服务自动冰洁该IP和端口对外发布
//可以是URL: 代表发布结果的跟url
&quot;serviceAddr&quot;: &quot;127.0.0.1&quot;,
//服务监听端口
&quot;servicePort&quot;: 20060,
//人脸向量提取引擎
&quot;faceIDServiceURL&quot;: &quot;http://10.0.131.58:8007&quot;,
//ES服务访问地址
&quot;esURL&quot;: &quot;http://10.0.5.149:9200&quot;,
//redis服务访问地址
&quot;redisURL&quot;: &quot;redis://localhost:6379/0&quot;,
//结果保存目录
&quot;resultFileSavePath&quot;: &quot;D:\\Code\\DayangCode\\PythonProject\\LVFaceService\\results&quot;,
//测试参数:是否标记人脸,标记人脸会导致分析非常慢
&quot;isMarkFace&quot;: false,
//测试参数:是否提取源视频帧
&quot;isReExtractSRCFrame&quot;: false,
//测试参数:是否添加人脸向量提取任务
&quot;isAddFaceIDTask&quot;: true,
//测试参数:是否使用引擎聚合结果
&quot;isEngineAggregate&quot;: false,
//测试参数:标记人脸的原视频抽真图片保存目录
&quot;markFaceSrcImagePath&quot;: &quot;D:\\Code\\DayangCode\\test\\FaceVctorTestData\\src&quot;,
//测试参数:标记人脸后图片保存目录
&quot;markFaceTarImagePath&quot;: &quot;D:\\Code\\DayangCode\\test\\FaceVctorTestData\\tar&quot;,
//聚合相似度:人脸聚合阶段默认聚合相似度(可接口指定,不指定使用该值)
&quot;aggregateSimi&quot;: 0.71,
//二次聚合相似度,经过第一次聚合后再一次聚合的最小相似度
&quot;secondTimesAggregateSimi&quot;: 0.71,
//人脸识别相似度:人脸识别阶段默认聚合相似度(可接口指定,不指定使用该值)
&quot;recognitionSimi&quot;: 0.71,
//人脸搜资源及翻库相似度:人脸搜视频和翻库阶段默认聚合相似度(可接口指定,不指定使用该值)
&quot;searchResourceSimi&quot;: 0.71,
//默认人脸分析间隔:单位ms
&quot;analyzeIntervalMs&quot;: 1000,
//默认聚合最大时间间隔:单位ms
&quot;mergeMaxIntervalMs&quot;: 1000,
//人脸重叠判断阈值
&quot;nms_threshold&quot;: 0.4,
//人脸过滤规则:可按照不同画幅配置不同规则
&quot;faceFilters&quot;: [
{
//最大画幅
&quot;maxSize&quot;: 720,
//最小画幅
&quot;minSize&quot;: 0,
//过滤规则:[人脸尺寸,人脸角度]
//如:[21,0]:代表人脸长边小于21且角度大于0度的,就会被过滤掉;[45,70]:代表人脸长边小于45像素且人脸角度大于70的,就会被过滤掉
&quot;condition&quot;: [[21, 0], [45, 70], [9999, 80]],
//参与人脸融合的人脸过滤条件
//如:[40,10]:代表人脸短边大于40,且人脸角度小于10的人脸将参与融合;[9999,30]:代表人脸短边小于9999且角度小于30的,将参与融合
&quot;mixCondition&quot;: [[40,10],[9999,30]]
},
{
&quot;maxSize&quot;: 1280,
&quot;minSize&quot;: 720,
&quot;condition&quot;: [[21, 0], [45, 70], [9999, 80]],
&quot;mixCondition&quot;: [[70,10],[9999,30]]
},
{
&quot;maxSize&quot;: 1920,
&quot;minSize&quot;: 1280,
&quot;condition&quot;: [[21, 0], [45, 70], [9999, 80]],
&quot;mixCondition&quot;: [[100,10],[9999,30]]
},
{
&quot;maxSize&quot;: 999999,
&quot;minSize&quot;: 1920,
&quot;condition&quot;: [[21, 0], [45, 70], [9999, 80]],
&quot;mixCondition&quot;: [[100,10],[9999,30]]
}
],
//系统参数(不能修改)
&quot;personDBESIndexSetting&quot;: {
##
},
//系统参数(不能修改)
&quot;personESIndexSetting&quot;: {
##
},
//系统参数(不能修改)
&quot;personFaceImageEsIndexSetting&quot;: {
##
},
//系统参数(不能修改)
&quot;searchDBESIndexSetting&quot;: {
##
},
//系统参数(不能修改)
&quot;resourceFaceESIndexSetting&quot;: {
##
}
}
3. 服务启动验证
在游览其中输入服务地址:http://IP:Port/LVFaceService/docs
3. 可视化测试说明</code></pre>
<h5>启动环境变量</h5>
<table>
<thead>
<tr>
<th>变量名</th>
<th>对应配置名</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>SERVER_ADDR</td>
<td>serviceAddr</td>
<td>str</td>
<td>服务对外发布结果地址;可以是IP:服务自动冰洁该IP和端口对外发布;可以是URL: 代表发布结果的跟url</td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td>servicePort</td>
<td>int</td>
<td>服务监听端口</td>
</tr>
<tr>
<td>REDIS_URL</td>
<td>redisURL</td>
<td>str</td>
<td>redis服务访问地址</td>
</tr>
<tr>
<td>ES_URLS</td>
<td>esURL</td>
<td>str</td>
<td>多个用英文逗号隔开</td>
</tr>
<tr>
<td>FACE_ID_URL</td>
<td>faceIDServiceURL</td>
<td>str</td>
<td>人脸向量提取引擎服务地址</td>
</tr>
</tbody>
</table>