immich的国内部署

自己用的TS551,其实挺好用的,但是有点嫌弃它的处理器了,最近一个月在折腾,最终用乔思伯N3搭了一个nas出来,用的是工控的R7 5800U。总费用大概在3000左右,包含正版的unraid plus.当前阶段性能是碾压的,肯定比现成的nas好不少,但是也折腾了好久,此处不表。

图片处理之前用的是ts551的qumagie,更早前用过photoprism。新nas的第一个尝试是mt photo,说实话,挺优秀,但是在人脸识别上面被qumagie按在地下摩擦了。最后,看到了immich,目前在当主力系统在用。mt的话,改了肯定买,本土化很好。

但是immich也有不友好的的地方。他的图像识别库,人脸默认是 buffalo_l,CLIP默认是ViT-B-32__openai,都是运行时下载的,从huggingface下。我的电脑肯定是下载不了的,有网络的原因,也有bug的原因。

bug的原因是request的线程。

config.py定义是:

class Settings(BaseSettings):
    cache_folder: str = "/cache"
    model_ttl: int = 300
    model_ttl_poll_s: int = 10
    host: str = "0.0.0.0"
    port: int = 3003
    workers: int = 1
    test_full: bool = False
    #request_threads: int = os.cpu_count() or 4
    request_threads: int = 4
    model_inter_op_threads: int = 1
    model_intra_op_threads: int = 2

可以看到初始的request定义是CPU个数。我的5800U是16核,导致16个线程向huggingface请求,直接被BAN,这里我手工改成4了。

另外的原因就是我没有科学上网,去huggingface下载几百M的库太灾难了。好在最后还是搞到了,我上传到了资源里面,大家可以自己去下。不过要注意,docker默认使用yml部署的时候,这个没有映射到主机目录里面,要自己改一下。

如果自己去huggingface下,要注意他下载的时候,会存在将文件名改名的情况,请必须要手动改回来!这个事情我debug了很久,最后是改代码才发现的。

它在调用识别的时候,会先看看cache里面有没有这个库,尝试load进去,如果load失败了,就会清掉这个库,重新去下。但是失败的原因是不会告诉你的,但你可以改代码让它输出来:

在main.py里面定义了:

async def load(model: InferenceModel) -> InferenceModel:
    if model.loaded:
        return model

    def _load() -> None:
        with lock:
            model.load()

    loop = asyncio.get_running_loop()
    try:
        if thread_pool is None:
            model.load()
        else:
            await loop.run_in_executor(thread_pool, _load)
        return model
    except (OSError, InvalidProtobuf, BadZipFile, NoSuchFile) as e: #修改这里
        log.warn (e) #添加一句
        log.warn(
            (
                f"Failed to load {model.model_type.replace('_', ' ')} model '{model.model_name}'."
                "Clearing cache and retrying."
            )
        )
        model.clear_cache()
        if thread_pool is None:
            model.load()
        else:
            await loop.run_in_executor(thread_pool, _load)
        return model

这样,它在load 库的时候如果失败了,也会告诉你原因,在后台log能看到。

最后不得不说开源就是好啊,有问题也能自己改代码调试。

immich的功能很强大。但是本土化不如mtphoto。只是后者的人脸识别和识别错误之后的校准让我放弃了用它当主力图片管理器的想法。

不知有没有大神可以把buffalo_l集成到mtphoto里面?

或者有没有大神知道中文的CLIP,我扔到immich里面也行。

--------------------------------------------------2024-2-18----------------------------------------

补充几个信息:

1、目前推荐使用huggingface hub的下载方式,通过国内的镜像网站进行下载。请参见下面两个文章,实测速度起飞:

【AI之路】使用huggingface_hub优雅解决huggingface大模型下载问题-CSDN博客

【AI之路】使用huggingface_hub通过huggingface镜像站hf-mirror.com下载大模型(附代码,实现大模型自由)_huggingface镜像网站-CSDN博客

2、实际上IMMICH是支持多语言CLIP的,multilingual CLIP,要下载相应的库,就是体积更大,需要更多的RAM。

你可能感兴趣的:(linux)