当前位置: 首页 > news >正文

tritonserver学习之八:redis_caches实践

tritonserver学习之一:triton使用流程

tritonserver学习之二:tritonserver编译 

tritonserver学习之三:tritonserver运行流程

tritonserver学习之四:命令行解析

tritonserver学习之五:backend实现机制

tritonserver学习之六:自定义c++、python custom backend实践

tritonserver学习之七:cache管理器

1、环境说明

机器:阿里云ecs服务器

redis:安装到本机,直接百度一下,网上教程很多。

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.listsudo apt-get update
sudo apt-get install redis

cache:使用本机redis,在triton镜像中访问宿主机redis。

2、docker镜像访问宿主机redis设置

2.1 在宿主机执行命令,查看docker ip地址:

上图中,docker的地址为:172.17.0.1,这个地址很重要,在配置访问redis时会使用到。

2.2 修改宿主机redis配置

redis配置所在文件路径:/etc/redis/redis.conf

要修改的地方:

bind 127.0.0.1 ::1 --------> bind 127.0.0.1 172.17.0.1

protected-mode yes --------> protected-mode no

取消屏蔽:requirepass food,设置redis密码,【food】即为redis的密码,按照自己喜欢的设置即可。

设置完成后,重启redis:

service redis-server restart

3、模型配置

      用过triton的同学都知道,triton中,每个模型都对应一个配置文件,这个配置文件描述了模型本身的属性, 比如模型的平台,是pytorch模型还是TensorFlow模型还是自定义的模型、模型输入、输出信息,batch信息等等,缓存的设置,是支持在模型的维度上去设置的,某个模型使用cache,某个模型不实用cache,使能cache的设置参数如下:

response_cache{enable:true
}

比如,tritonserver代码库中官方示例模型:densenet_onnx,开启这个模型的cache功能,该模型的配置如下(配置文件为:config.pbtxt):

 

4、启动triton

4.1 启动tritonserver镜像

sudo docker run --rm -p8000:8000 -p8001:8001 -p8002:8002 -it -v /root/tritonserver/server/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:23.12-py3

4.2 启动triton

tritonserver --model-repository=/models --log-verbose=1 --cache-config=redis,host=172.17.0.1 --cache-config redis,port=6379 --cache-config redis,password="food"

此命令行中--log-verbose=1参数,设置该参数,日志打印更全,redis配置命令--cache-config是一个可变的配置命令,可以重复设置多个参数,官方的说明如下(GitHub - triton-inference-server/redis_cache: TRITONCACHE implementation of a Redis cache):

triton启动后,可以看到缓存已经被enable了:

 

5、执行推理

执行命令:

sudo docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:23.12-py3-sdk

镜像启动后,运行以下命令,请求 densenet_onnx模型执行推理:

/workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg

 

 6、查看redis缓存

发出推理请求后,推理结果就会被缓存到redis中:

该key的存储类型为hash表,内容如下:

127.0.0.1:6379> type 16176101894200574872
hash
127.0.0.1:6379> hgetall 16176101894200574872
1) "0:t"
2) "0"
3) "0:b"
4) "\x01\x00\x00\x00\xc5\x0f\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00fc6_1\x04\x00\x00\x00FP32\b\x00\x00\x00\xe8\x03\x00\x00\x00\x00\x00\x00\xa0\x0f\x00\x00\x00\x00\x00\x00\xe3~,\xc0\xfd\x05\xb0\xbfg\x10\xfe\xbf([\x97\xbf\xbd\x9f\xe6\xbf\x9ddx\xbfc5\xc2\xbf\x91\xc8\xd2\xbfn\xd0\x1e\xc0\xd6T\x98<\xf1\x9c\xb3\xbf\x13\xef0\xbf\x03\xe9H>s\x89\x9c>\x9a\x97\xcc>\x0eR\xfe\xbcu\xd8\xd3\xbf6/\xcf=U\x0e\x14>>\x01o\xbf\\\xe4\x89\xbfMG\x03\xc0\xc6\x06\xdb\xbf\x8b\x00\xb1\xbe!n;\xc0\xc2\xf5\xf1\xbf\xb2\xcf\xbc\xbf\x85\xaa\x00\xc0\x883\xe5\xbe\xa1\xff\xbe\xbf\x1c\xd9'\xc0\x98x\x12>\xf3\x86=>$\xbb\xfa\xbf\xaf\xb7\xb6\xbf\xc9\xc0\xbc\xbf\a\x03\x83>\xdd\xc6\xa9\xbf\xc2\xab8\xbf\xbd\x98\xc0\xbf\x82\xee\xc0>\xbc\a\xd1\xbfeW\x93\xbf_\x7f\x0b\xc0\x7f\x97\x11\xbf#\x89O\xbe\xb6\xf2\xc5>GS\xde\xbf\xde\x01;\xc0\xa8\x04z\xbf&\x87P>\x8a\xfd\x17\xc0\x86\xba\x8d>\xd7\x11r>]\xa2\xe3>\xb4H\x9d\xbf\xc1e\x12\xbeED\x1e\xc0\x0b\x95\xd5\xbf\xeb\x17~?:c\xa1\xbd\xfe\xe1G\xbfF\b+\xc0\"\x0f\xc6\xbf\xef\x9cf\xbf\x86\xb9j=\x03CI?\xb9:\xec\xbe\x8dG\xc3\xbe\xa1\xcfa\xbf\x96\xf7\xf9\xbf\xd2P\x86\xbfI/\x04\xc0\xd0;\x99\xbf\xe9\xe6.\xc0\x8b\x1e\x19?PZ\x94>\xd7m\x7f?\x1d-\a@\xe2\xd0\xa2\xbeL\x91b\xbf\xb5\xe4[\xc0\xfc/\xbc\xbf\xc6\x1dU\xc0P,@\xc0\x80\xa2F\xbf\x13\x9a\xcf\xbf4P\xb6?E\x8f\x94\xbf\x96\xd1\xa9\xbfe\xb9\x99?\xf2M\x00\xc0E\xaaB\xbf\xf6J>\xbf\xb3\xe2o=)02\xc0\xaa\xf5\x00\xbf\xf3;,\xc0\x84\xc6\xfb\xbfs\x8d\xb2\xbf\xb2\x99\xbd\xbfT\xc4\xe0\xbf\x0e\xad\xfd\xbfn\xc0\xa1\xbeE\x849\xc0:7\x13\xc0O^\xa1\xbe`\xf1\xe9\xbf2n\xeb\xbe&#>\xbf\x0e\xa6\x06\xbf\xd1T\xa4?\x8c\xdb\xed? \x1d\xab\xbf\xf6\x02\xa0\xbf@\x85(\xc0\x83l\xa5\xbf\x93Y\x93\xbe>\xe7\xa5?>\xecS=\xe2\xd3\xdc\xbf\xc3\x01\x80?\xdf\x96\xd9?C4\x8a\xbe\x06\x97\x98?\x8d\nC<sw\x15\xbf%\xef\x18\xc0zwv\xc0D\xe63\xc0M\x9e\x00\xc0\xd3\xc3\xb6\xbf\x91@\x95\xbf\x1d\xf6\r\xc0\xa1\x1e#\xbf\xa7\xa6+\xc0\xa9o\x1e\xc0\xafn\x1f\xbf\x14\xa8\xb4\xbff%\\\xc0Xf\x0c\xc08\xd8\xae\xbf\x0bg\x1b\xc0\x11\aM\xc0\x19Gj\xc0\x0e\x97\xfa>^d\xbd\xbf\xd3\xf7\xf4\xbf\bz\x03\xc0\xab9\xf4\xbfLH\x9c>W\x11\xa2=\xae\xd2\x86\xbf@B^\xbf\xc9\xf0>\xbe\x18\xb7\xe4\xbe\xe5+\xec\xbeb\x93\r\xbf\x15\xd4\x17\xc0\xf6\x86~>N\x97\xf5\xbf\x86\xf7\xc1\xbb\x01\x0b\x1a>\x88\xc1\xdb\xbeZ\x9d\xf0\xbe\xd7U\x94\xbf`8\x8b\xbfv\xb0\xef\xbf\xba\x01\x05\xbf\xc2\x0f#\xc0\xf9(\x17\xc0L{4?\xf1&H?\xf6\xd8\x92\xbf\xaa\xe1}\xbf\xe5T\xdf\xbf\xe03h\xbf|\x80\xbe\xbf\xd6\xc5)?\xb8\xae\x9b\xbf\r\xb1\x18\xc08\xe95\xbf7\xd9\x94\xbfn\xdfU?\xc1~4>\x114\xb4\xbe^f\x89\xbd\xdce\x99\xbf\x8cL1\xbf)D\x82\xbfL\xf5\x06?\xec]$?\xad:\xbd\xbf\xf9!E\xbf\x03\xdc\x9e\xbf\xa0\xb9\x87\xbd\x1c\xb7\xc0=\xd7\x85\xad\xbd\xa4\xfb\x01\xbf\x88+\xc8>6\xfe\x8f\xbf\xa7\xd4\xd1\xbf$\xb7!>\xec[\x97>\x9f\xbb,\xbf\x8a\x8e\xc1\xbfR\"\xed\xbfR\xfd\r\xc0N\x86\x1e\xbeg\xd21\xbf\xd9\\\x9d\xbf\x9e\xf5\xfa>2\xa8\x94\xbfl\xe0\xc8\xbf\x01\xc5$\xc0\xb0\xc6\xa9\xbf\xd8\x17\x12\xc0O\x15\xd5\xbf8\x96\xd3\xbf\x91\xc13\xbf\x98V\x17\xbf\xb4\b\"\xbf\x01W\xe3\xbfv!\xe7>\xfc\xd9o\xbfH9\xce\xbf\x94\xb4Q\xbf2g\x1a\xbf\x9d\x9a\xe1\xbf\xaf\x97\xae\xbf7\x9c>\xbe\xd2\xa5e>\xa78\xfb\xbe5\x04\xc1\xbe}\xe8\x97\xbf\x8d\xe4\xb8\xbf6\x89\x85\xbfp\x1e~\xbf\xda0\xb2\xbf\xc5\xff\x9a\xbfD\x9d\xa9=\xae\xe5U\xbd<6,\xbf\x9f\x92\xfb\xbe\xbb\x1c\xd3\xbf\xa19&\xbf\x00\x92\x9e\xbfJ\xa0x\xbf\xb8\xa5\x06>\x1e\b\xce?-C\xd9\xbes\xc1[\xbf\xd8\xf3\xd4\xbf\x0fK\xe8<\"\x7f\xfe>\x94\x12<\xc0\xdb_\x19\xbf\xfb\xcb\xfd\xbf\xb1\x85J?]\x14\x01?\xa4\xa0P;\x1d\xdf\xa8\xbfKB\t\xbf\n\xf3\x95>@\xb0\x8a\xbf\a\xd6\x92>o\xf3\xae\xbe=\x97\xa1\xbf\xa1\xea\xac\xbf_\x86\xae\xbfa+\x0e\xc0\xcd\x17\x84\xc0\xaa\xed\x11\xc0\x9f\xda0\xbf\x94\xb3\x82\xc0=n\x11\xc0\x0b~\xa1\xbf\x9d)@\xc0\x0b\x11r\xc0\x0e\x0e\x1e\xc0\xc3\xbb\x18\xc0\xc6\xf0\x84?\x000\x04>\x0f\xba1\xbe\x1e\x10\xa9\xbf[\x17I?\x05\x064\xc0o\n\x16\xc0\x15\xb9X\xc0[\x8a4\xc0\xd6Z\x00\xc0\xda\x06&\xc0\xc5=\x03\xc0a\x87\r\xc0\x16\x82j\xbft\x94\x9c\xbf \xa1\xc4\xbe'\xa0\x95\xbew\x8c\xef\xbf\xd1[\xaa\xbf\xcfDZ>M\x966\xbf\xbe\xd5\x1e>.&6>r\xd9\xdb\xbf]{\xb4\xbf\x0cg\x83?\x8d\x96}\xbf}?\xa9\xbf\x1af\x88\xbfD\xf1\xdf?\xe1*\xe8\xbf\x99=\x0b\xbf\xdd\x1b\x87\xbe\x87\xab\xde>\xbdx\x16\xc0\xf5l\x10\xc0\xab\x1e\x0c\xc0Fw\x86\xbf'\x91e>\x0eqt>N\xd0@\xc0\xf8\xe7\xfc\xbf\xab\xbc\x06\xc0\xd1\xde\b\xc0\xea\x8e\xfc\xbf6\x14\x05\xc0\xf2\xb2\x82\xbf%\xcd\xc3>\x8b\xedl\xbe\xba\x1c\x9e\xbf\xf5\xf2J\xc0\xc6\xd9\x80\xbf\xb6L_?m\xa6\xbb\xbf\x19\xffa\xbf\xfbO\xf6\xbf\xf9\xffe=@\xb3\x9e?\xe2\xa1\x1b\xc0\x86\xe5\x06\xc0\xe1\xbb\xe1\xbf&g\x05\xc0\xf3\xf6\xd9\xbf\xa0d\x9d\xbf\x94\x90k\xbe\xf0\xad\x8d\xbf2\xce\xd1\xbf\xf4A\xa3\xbf\x8c\xe8\x12\xc0m\xc4e\xc0t\xc8\x8d\xc0\x85\x90w\xc0\xc2[>\xc0;\x15\x7f\xbe\xcd\x12\n\xc0_\xb3\x15@5?\x12\xbe_N\x83?8\x1d\t@\x1d\x13\xa3\xbe\xc6d\x89?\x17\xc6\x05?\xeeb\x11\xc0\xb8\xbb\xaf\xbf\xe7\x86n\xc0?\xdb\x10\xc0AC\r\xbf&\xd4\x03\xc0\x84=\x04\xc0\xec\xeb\xfd\xbfo\xa1\xff\xbfZ/\xaf\xbf\x9d\b#\xbf\x944\xc1\xbf\x9c\x0e\xeb\xbf~\xe0\xfe\xbf\xa8*}\xbf\xab\xbe\xff\xbf\xc6\x8b\xf0\xbf\x8b\x1d\x8a\xbf\xb9\xe8\r\xc0\xa8\x0e|\xbf0\x8b\xa1\xbf\xf6\xc0\xe5\xbf\x1fA\r\xc0\xdd\xd2\x84\xbf\xc7e\n\xbfP \x15\xc0'\x9d6\xc0Q\xf5\x12\xc0\xba\x87\x9e\xbf\x9b\xe0\xde\xbf\xfb\xd4\x04\xc0k\x81\xb3\xbfF\x80\x8d\xbfO8J\xc0\xbf\xad\xcc\xbf`\xb2\xac>\x02\xa0<\xbf\xe1\xb7\xbf\xbf\x14}\x9b?^\x96\x1a@<,\x16\xc0\x93\x14\xd8\xbff\"\x12\xbf\x12C\x0b\xc0\xd8\xeb\xaa\xbf\xab\xaf\x93\xbf\xb8&\xf4?_\xc6I\xc0\x04\xf3\x93>\xd0ow@\xcf\xb0\xe3\xbf\x19\xbdO?b\xaa%?\x17Y\xf8\xbe\xa0\xc4\xa2>\xa1D\xe9?\xeb\rv?@\x17\xd5\xbf\xa0\xaf\xd5?\xa0K\xc1?]\x1es\xbf\x13u&\xbf\xa7,\x1f\xc0Sx\x87?i`\x96@W\xffI\xbf\xf4\xbe3?\xdc\xe6\x1d\xbf\xf8\xe9\n\xbf\xc1\xd9\xfd?\x8f\xfcp\xbf\x91\x1a\b?\x88\xd42@\xe3\xca\xe3\xbf\x95\x92\xd0\xbf\x89q\tA4\x9a\xeb?\xb9\x1e\x82@\xe56\xe5@_\xd4\x8c\xbe\x93\x86\x97\xbe\xe5\x85\x00\xc0\xaa2\x17\xbf\xbf\x1e\xc0?\x055\xa9@\x1b\xd7s\xbfi\a!\xc0\x98\x85\xf2\xbf{G\xb7\xbe|\xba/\xbf_\xe5\xc0\xbe\x85r\x97\xbf!\xc1l@\xc9\xf8F\xbf\x05\xecG@\xaa\xf0\xe3\xbe\x1aa_?\xc8A\xe4\xbbjH\x03\xbf\xf0\xbem;\xec\x8c\x99@\xcc\x1b\x83@-\xe3\x80\xbe\xe18+\xbfK\xe3\x99\xbf\x1c\x8b\a\xc0\xf3M\x87@NF\xc0@AQ\xef>\xc1\xc8\xfd\xbf\xe3\x8eZ@\xb0hT\xbf5\x97\x15>\xbaF(\xc0L\xde\xf4\xbe\x14\xc3\xcb>\x8f\xed\x10\xbe\xf9\x90\x02\xc0CV@?S`\x00@\xe7\xc9}\xbf0\x84\xec\xbf\x84\x86\x17@\xfc~I=d`n@\xef0\xfe?\n\x95\xb9\xbe\x858\x00\xc0.\xbf\xcc\xbf\xed\x15\xb4\xbf\xd8\xcfj\xbf\xe0\xfa0?\b\xf2k?\xc4\xe7\xd3\xbf\x14\x006\xc0M\xde\xe8>\x14\x0c(@\xa0Z\xe6\xbf\x8d\xf7\x15\xc0\xc8&\xe0?\xd1\xf5\x84@\xd0\x97uA\\\xcc&A\xdf\xae\xa1?\t\x9eY?\xf9\xc89@\x1c5C\xbdx.\x04?\xf0\xc9@\xc0W\x03?@y\xf0\xc1>[\xa2@?\xbe\n\x16@*|\x1b\xbf\xe14\x91\xbe\x16w\xb6?\xb2\xb6\x01\xbf(6\x1e\xbf>\xf4J@\n\xc2\xfa>f\x0e\x0b@\x14B\xca\xbfa\x16\xf7\xbfS\xe6\x8f?f\xeb\xf3?\xa8\x1eP@\xfea\xfd\xbe\xfc\x14\xa0@)<\x1b@%\a\x03@\xf5\xf8\x83>\xff;\xad\xbe\xd1\xd3\xc3>\t\xc3\xbd\xbc\x8b\xca\xd8\xbf\xcf\xa4\xc1\xbf(8\x02@\\\x8f\x14\xbf\xae\xf4\x14@\xb7ys?\xbe\xc4$@\x11\xc7\x17@5\xbc,?\xce\"\x9f?\xbd\xc6r\xc0\xd8S\xc6\xbe\xc6\x05'\xbf<\xdb\x06A\xfc\xf7\x91@da\x9b\xbeP!\xcf\xbe\xd4\xedv\xbd\xcb\x16-\xc0r\xf3\xa0>\x1c\xdb\xa0\xbf\x81\x8ae>7w\x0f=\xba\xf3\xd5\xbfM\x19a\xbd\xfa\x83\x88\xbfy\x949@,\xa5I\xc0xG\x92\xbfX\x91\x92\xbdr\x1a\x1d@\xd7\r\xac\xbf\xd6\xecf\xbf\x05\xb7\xd3>\xa18\xf9\xbe\xfc\xde\xde@\b@\x18\xbf\x89\x99\x0b@_\x93\x11\xbf\xc6\x84Y\xc0l\x19s\xbe\xbc\xd6\x83>\xa3\xf8E\xbe&{\xc2\xbf\xba\xc1\xdd\xbf\xf8{\x82<\x8b\x87\xb1\xbf!\xf7\x0f@\xec\x0cQ@\xb6G]\xbf+\xea\x00@W\xc7\xc1?\xf2\x95\x80?j\xe6\x95?\xa0\x82\xaa\xbd\xf0\x1b!@\xdf\xccB?\x8d..>\xb8>\r\xc0\xa8B\xd0\xbdn\x1a\xdc\xbe\xa4\"\xd1?\xa4n\x93?\xd6\\U@:\x97&\xbf3\xde~\xbe\x81/|\xc08^p@4\x98\x8f@\xedp|\xbeu\xfcS\xbe\x97<U\xbf\xbb\x1a\x01\xbfT`\x91?\xfe:O?^\x9a^\xc0\xfa\xbd\x95?\x93\xc6\xee\xbf\xafs\x06@t\x93\x16@\x91\xb9\xa0?|]\xa1@\x9bS\x8c@\x915\x8b?\x9f\xf5z\xbf\x0b\xaa\xae@_\x1d\x12@a\xe8\x02?\x1f(\x03\xc0dl\x84@\x0b\x93\xc1\xbf\xe2\xea\xf3>Q#5@\xf3*\"\xbf\xd4\x91\x8c@\x15\xa8\x8a@\x05\xa5\xa1@\xfa\xa0\x83\xc0\x99\xc46@\x93\"\x00>\x02\xb8\x1b\xbf\xc4\x12\xb0>n\xb4\x85\xbf\xd4\t_\xc06\xcei?\xd9m\xda>\xcc\xda\x9a?/\xce\x97?E\xdd\x13\xc0\x1d\x0bO?\xef\x80\nA\x1ev\x12@\xd2\xc8K?C\\V@J\x1c\xc7?\x98\x1c{\xbe\x827K@\xb8\xb0\xab\xbeT\a\x99\xbf\xa8\x8c\a\xc096\xf8\xbf\\x\xcd?\xa0V\xb5@v\x84h\xc0\xa6\x88\xf2\xbf\xda\x83\x8d@\xf67*\xc0\x9bh\x99?\xb1!\xd6\xbf\\\xd3\xac@\x83_\x15?\xc2\xd6\x83\xc0\xc7\xf87\xc04\xbc\xa5\xbf\xfc\xc2\x84\xbf\x18SD\xc0\xbc\x83\x8b@\xf9QQ?H\x9c\x92\xc0\xa8g!\xbf\xfb\xd2\x86\xbfi\x85\x1f@+<\x0c@n\x04\x80@\xb7\xadF@\x9e-\xe6\xbe\x0f\xee\xbb?o\xbd\xcc?\"\xcf\xa1\xbd#?\x86@!\x9ez\xbf\xcf\xe9\xdc>/6\x01\xc0\xcedD\xc0\xf8\xb6\t\xbe!\t0@+\x8et?BZE\xc0\xd3s\xb9?\x10\x05\x19@Z\xc8+\xc0c\xd9\x01\xbf\x86\xa8\x8b?\xb4`c@\x80=6\xbf\xf1~%\xbd\xd1\xe6\xe4\xbfY\xcfS\xbe\xf6\xe8\x9a\xbf\xa0W\xae\xbf\x0b\x04\x90\xbd\x1c\x9e\x19@\xcc'\xc8\xbd\x8c\xbdh@\xf7%]@\xfe\x13s?X\xc3\x9e?\x88\xee?@:`\xac\xbfi\xd3_\xbf\x01I{\xbf\x88\xb5B?\xd0\x9f\x12?[,C@\x87\xf3!\xbf\x1bv^@\xe7^^\xbf8\xd6<\xbfE\xda A\xd5\x01\xa4\xbf\xd8\n#?\x175\x94>3\xfa0@\xee\xf7\x82\xbf\xb6\xce\x16@2\xa0\x19@\x1c\x87\x87?\xb3\xd2\x9f\xbf=\x8f\x14\xc0\xbb8p?\xc1\xbe\x89@\xb8\xc9\x9f@\xc6\xfe\x91@\x03\xfc\x80?\xc7x+\xc0`\x03*?\xad4f?\xb5\x98\xb9\xbff\xdbj@\x9fS\xb0@@\xa8\x83?\x16\xe7\x92>\xc7\x87\xe5?\x1aV\xaf\xbf\x0f\xe6\xb5\xbf\x0580?\b?\xde?\xe0\xc6|@\x0e\xd4\xca\xbfZ\xd4\x18@\"\\\x0e\xc0\rG\xd8?)\x01\x91@\x89\x11!?\xad\xe6\x9a@\xd8y\x0b?D4\x14\xbf\xbe\xc0\xa5>\x17\xcb\x9e=Q\xac\x9d\xbf\xbe\x8aM@T\xb5M\xbf\b\x18\x13@\xef\xe3\x9f?\x0b\x91\x1a\xbe\x1f\x82\x17@\xef\x90\xd1@\xfb\x90\xdc?\xad\xaaz\xbfM*\xe3?\x86\xcdK\xbfx\xb4(@\x91[\xa4\xbf\"\xb1\xb3?\x19\xe2\x1a>3\xb7\x89?\xafyo\xbe\xe5X\x15@\xff\xb8G\xbcA\xaa\xe3>\x0c\r\x94\xbf\x92\x17q\xbe\xf9%\xa3?\x9e[\x9f\xbeH\xb3;\xbf\xee\xd7\x92=\x84M\x85\xbc\x88V @\xbf\xc3Q?\xd3C\xcd\xbe\xab:\x8f\xbe0=\xa6\xbe>w\xac>\x1e\xbc\x17\xc0\xeb)\xe7>\"\xf9R\xc0k\x17\xf9\xbf\xde\x14\x88@\xfd\xe0\x05\xc0\x15L\xb0\xbe\xecC\x1d>\xbaq\xde?\xf8\xe1\xdf@\xa0\x04\x83?\xd0r{>\xf3\xb8\xff\xbdY\xdc\x02@\x14\x8b\xa2\xbf\xbc\xfc\x8f\xbf\xaa\x1f[\xbe\x12\xd5\xc1\xbf\x18\b\x0b@x\xec\x00<\x94Z\x80\xc0]\n\r\xc0\x11\\\xc3>\x00\xba\x86?\xd2\"\x15?c,\x9e\xbf\x90\xa9\xb9?J\xd5\xe0?;\xab\x88@\x94M\x19\xc0d\x0bt\xbf\x17Og\xbf\xc2h~\xc0\xcd\xebW\xbe`\x02\xa1>9W\xc9\xbf]\x16U@\x96\"<@\xc9\xcf^@\xa8<\xb0=\xf9i\xb7?\xce\x90c\xbf\xfe\x9b\x97=\x80*\xc9\xbc\x04\xe1Q@G\xc6\x85?\xf1\xfa+@]\x04\xc9\xbfQw\x9b?o\x8b\x11A63\x93?k\xef\xc6>M\xfbn@-\x17C\xc0\xc9\xce\xb5\xbfi\x00y@\xe6)\x17\xc0O<\x10\xc0lM\x97\xbf\x91\xbb]@\xc6\xb1\x03\xbe\xed\xa0\x1d@\x06\\:@Z,\x84\xbft\xc2\x11\xbf\\\x98\xec\xbf\xb5W\x97\xbf\xd4\x05\x8b\xbf{G\xe2@\x13\x9a%\xbfb\xe85\xbf\x8c\xed\x18\xc0\xc8\bg@\b8\xfa\xbfm\xb1\x88\xc0\x92\x02\xbb>5<\r@\xbf8\xbf?\xcb\xd7\x03?\xba\x14\xf4>\xfep>\xc0\"\xb3t\xbf\xd4\x9b\x02?\xc6@\xf0@\xa9c\x0b\xbf170\xbe\xe0\xd9/=\xaf\x0f.\xc0\xa0\xdb\x9a\xbfw\xff\x97?\xb8\"\n\xbf\xb2c\x83?\xddG\x80?\t\x1a >\x8d\xd3u\xbf\x90\x9f\xe4\xbf\xae\x0b\x82@I\xfa\x9c?\xef[\xa3@\x96\xb4\x1aA\x10p\x0f\xbe\"\xc8\rA\x88\xd4B@\xc7\xba\xb3?;-\x14\xbfE\xd7\xf5\xbd\x8d\x0f\x89\xbf\x9f\xed_@\xe7x\xd0\xbfkNo?\x17\xb6\x9d@_\xb4$@\xac$\x05\xc0_\xd9\xaf\xbf\x02I\x9b\xbfIF\x0e\xc0)\x93\xa2=g\xaa\x01\xbf\xce\x04b@4f\x03?\xf8\xba`?\x1b4\x1f@G\t\x15@\x0f\x98;@cc\xa3?\b\xea\xd3@}\x89t?\x9d\xa0\x16@\xd9\x1e\x11@\xcc\xc8\x1e@\xc8L\xc7?\xcb\x06\x01@-\x97\x14@0Q\x88\xbf\x95\x016@\xc4\"\x9d?K\x14\xeb?^\"\x16@\x98\x81\xcf?F\x05*\xbc\x97\xd4\xe5>\xd3\xaf\xbf?\xfa\x8a\x1a@\xc5W\x95?\x06\x85\xb9?\x1c,$@\x17\x971\xc0\xc9\xe3\xc8\xbf\xf5\xb6!@\x99\xbd;@zM\xf3?\x9c\xdf\x1b@qF\"@\xf1\x06\x9b>@\x8ar@oW\x92\xbe\xd5w/?\xe8\xde\x0f?\xc0Z\xf2\xbe\xef\xc1\x1f@\x8b\xbb\xd1@\xb5\x1b!@I\xf8y?\xa40\x96\xbf-\xd2K?*g+@ST\xb9@\xbc\xea%A\xb1\xa3SA\x163\xd6@\xa3\x96\xe6\xbew\xe44?\xa3\xb3J?L\xce\x8f\xbf\xf3\x0c!\xc0]\x81\x89>\xda\xd6Y>\xa1}.?B!/\xbf\x06\x9c\x1d\xc0EB=\xc0\x9a\xbd\xba>\x9d\xef\x13?\xe6\xfe\xd7>\xc3bV\xbf+\xe9\x0b?\x12\x00\x86\xc0x\x939?\xb9u\xdb?\xfd-\b\xc0FF\x1e@$j\xc3\xbf\xd3\xe3\x87\xc0\xfbQ\x13\xc0IbK\xc0sQ\x87\xbf\xa3\xc8\xf1>\x94\x9a\xb3\xbf{\xdf\x01\xbf\xac\xa5\x89@"
5) "0:i"
6) "0"
7) "0:s"
8) "4049"
127.0.0.1:6379>

这个key中,一共存储了4个field,分别为:

0:t
0:b
0:i
0:s

这四个field的生成逻辑,可以参考如下代码:

std::string
getFieldName(size_t bufferNumber, fieldType fieldType)
{switch (fieldType) {case buffer:return std::to_string(bufferNumber) + ":b";case bufferSize:return std::to_string(bufferNumber) + ":s";case memoryType:return std::to_string(bufferNumber) + ":t";case memoryTypeId:return std::to_string(bufferNumber) + ":i";}return "";
}

模型的推理结果被缓存后,下一次,同样的推理请求,就会命中缓存,不会再次执行推理,这样不仅降低了请求的耗时,也节省了算力。 

相关文章:

tritonserver学习之八:redis_caches实践

tritonserver学习之一&#xff1a;triton使用流程 tritonserver学习之二&#xff1a;tritonserver编译 tritonserver学习之三&#xff1a;tritonserver运行流程 tritonserver学习之四&#xff1a;命令行解析 tritonserver学习之五&#xff1a;backend实现机制 tritonserv…...

2024有哪些免费的mac苹果电脑深度清理工具?CleanMyMac X

苹果电脑用户们&#xff0c;你们是否经常感到你们的Mac变得不再像刚拆封时那样迅速、流畅&#xff1f;可能是时候对你的苹果电脑进行一次深度清理了。在这个时刻&#xff0c;拥有一些高效的深度清理工具就显得尤为重要。今天&#xff0c;我将介绍几款优秀的苹果电脑深度清理工具…...

UE5中实现后处理深度描边

后处理深度描边可以通过取得边缘深度变化大的区域进行描边&#xff0c;一方面可以用来做角色的等距内描边&#xff0c;避免了菲尼尔边缘光不整齐的问题&#xff0c;另一方面可以结合场景扫描等特效使用&#xff0c;达到更丰富的效果&#xff1a; 后来解决了开启TAA十字线和锯齿…...

Java面试值之集合

集合 1.HashMap底层?扩容机制?1.7-1.8的升级?2.HashMap的长度为什么是2的幂次方?3.HashMap 插入1.7和1.8的区别?4.什么是红黑树?O(logn)5.HashMap为什么会使用红黑树?6.ArrayList底层?扩容机制?7.LinkedList底层?扩容机制?8.ArrayList可以序列化,但是为什么不直接序…...

React之组件定义和事件处理

一、组件的分类 在react中&#xff0c;组件分为函数组件和class组件&#xff0c;也就是无状态组件和有状态组件。 * 更过时候我们应该区别使用无状态组件&#xff0c;因为如果有状态组件会触发生命周期所对应的一些函数 * 一旦触发他生命周期的函数&#xff0c;它就会影响当前项…...

LeetCode -55 跳跃游戏

LeetCode -55 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…...

Android和Linux的嵌入式开发差异

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…...

关于Node.js异常处理的教程

在Node.js开发中&#xff0c;异常处理是非常重要的一部分。良好的异常处理可以帮助我们及时发现和解决问题&#xff0c;提高系统的稳定性和可靠性。本教程将向您介绍Node.js中异常处理的最佳实践和策略。 1. 使用try-catch捕获同步异常 在Node.js中&#xff0c;可以使用try-c…...

13. Springboot集成Protobuf

目录 1、前言 2、Protobuf简介 2.1、核心思想 2.2、Protobuf是如何工作的&#xff1f; 2.3、如何使用 Protoc 生成代码&#xff1f; 3、Springboot集成 3.1、引入依赖 3.2、定义Proto文件 3.3、Protobuf生成Java代码 3.4、配置Protobuf的序列化和反序列化 3.5、定义…...

Spring: Springboot 框架集成不同版本的spring redis

文章目录 一、集成不同版本的spring redis1、Spring Data Redis 1.x&#xff1a;2、Spring Data Redis 2.x&#xff1a;3、Spring Data Redis 3.x&#xff08;Spring Boot 2.x&#xff09;&#xff1a; 二、springboot集成Spring Data Redis 2.x1、首先&#xff0c;确保在 pom.…...

学习JAVA的第八天(基础)

目录 多态 前提 形式 测试类 调用成员的特点 优势 劣势 包 注意事项&#xff1a; final关键字 常量 命名规范&#xff1a; 注意事项&#xff1a; 权限修饰符 分类 代码块 局部代码块 构造代码块 静态代码块 抽象类 抽象类&#xff1a; 定义格式 抽象…...

【硬件相关】IB网/以太网基础介绍及部署实践

文章目录 一、前言1、Infiniband网络1.1、网络类型1.2、网络拓扑1.3、硬件设备1.3.1、网卡1.3.2、连接线缆a、光模块b、线缆 1.3.4、交换机 2、Ethernet网络 二、部署实践&#xff08;以太网&#xff09;1、Intel E810-XXVDA21.1、网卡信息1.2、检查命令1.2、驱动编译 2、Mella…...

【JavaEE】_Spring MVC项目之建立连接

目录 1. Spring MVC程序编写流程 2. 建立连接 2.1 RequestMapping注解介绍 2.2 RequestMapping注解使用 2.2.1 仅修饰方法 2.2.2 修饰类与方法 2.3 关于POST请求与GET请求 2.3.1 GET请求 2.3.2 POST请求 2.3.3 限制请求方法 1. Spring MVC程序编写流程 1. 建立连接&…...

【JavaEE进阶】 Spring AOP源码简单剖析

文章目录 &#x1f343;前言&#x1f340;Spring AOP源码剖析⭕总结 &#x1f343;前言 前面的博客中&#xff0c;博主对代理模式进行了一个简单的讲解&#xff0c;接下来博主将对Spring AOP源码进行简单剖析&#xff0c;使我们对Spring AOP了解的更加深刻。 &#x1f340;Sp…...

Redis--内存回收机制详解

什么是内存回收机制? 众所周知Redis之所以性能高是因为数据都存在内存中&#xff0c;内存是很宝贵的&#xff0c;Redis的内存回收机制本质就是处理达到过期时间的key-value&#xff0c;以及当内存到达最大使用值时候触发的内存淘汰策略。 Redis数据删除的策略有哪些&#xf…...

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…...

APIFox-自动获取登录状态操作

APIFox-自动获取登录状态操作 概述 作为纯后端开发码农&#xff0c;每次接口开发完的调试很重要&#xff0c;因此每次重复的手动获取登陆状态Token或者直接放行就太麻烦了。 APIFox提供了前置操作&#xff0c;可以很方便的自动获取登录状态&#xff0c;节省大量重复劳动时间。…...

【NDK系列】Android tombstone文件分析

文件位置 data/tombstone/tombstone_xx.txt 获取tombstone文件命令&#xff1a; adb shell cp /data/tombstones ./tombstones 触发时机 NDK程序在发生崩溃时&#xff0c;它会在路径/data/tombstones/下产生导致程序crash的文件tombstone_xx&#xff0c;记录了死亡了进程的…...

CentOS7 Hive2.3.8安装

CentOS7 Hive2.3.8 安装 建议从头用我的博客&#xff0c;如果用外教的文件到 一、9)步骤了&#xff0c;就用他的弄完&#xff0c;数据库不一样&#xff0c;在9步骤前还能继续看我的 一、 安装MySQL 0.0&#xff09;查询mariadb,有就去0.1&#xff09;&#xff0c;没有就不管…...

代码随想录算法训练营第四十四天 完全背包 、零钱兑换 II 、组合总和 Ⅳ

代码随想录算法训练营第四十四天 | 完全背包 、零钱兑换 II 、组合总和 Ⅳ 完全背包 题目链接&#xff1a;题目页面 (kamacoder.com) 解释一、01背包 一维 &#xff1a;为什么要倒序遍历背包&#xff1f; 首先要明白二维数组的递推过程&#xff0c;然后才能看懂二维变一维的…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...