tritonserver学习之八:redis_caches实践

news2024/9/24 18:28:58

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.gpg

echo "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.list

sudo 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 "";
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaWebssh票据管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh票据管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模 式开发。开发环境为TOMCAT7.0,My…

Vue+SpringBoot打造高校大学生创业管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…

MutationObserver是一个可以监听DOM结构变化的接口,请停用DOMContentLoaded

DOMContentLoaded已经要被放弃使用了&#xff0c;所以官方推荐使用MutationObserver来监听页面发生变化。但是如果你想继续使用也是可以的&#xff1b;Document: DOMContentLoaded event - Web APIs | MDN MutationObserver官方文档&#xff1a;MutationObserver - Web APIs |…

Python 自动化给女友发邮件:含新闻、天气、每日一句、图片 最全攻略系列02 如何添加emoji

Python 自动化给女友发邮件:含新闻、天气、每日一句、图片 最全攻略系列 是否想在女友面前展示程序员炫酷的一面? 是否想给她每日问候但是害怕忘记固定时间发送信息? 是否也羡慕别人可以优雅使用Python定时发送邮件? 欢迎来到Python自动化发邮件最全攻略系列,本系列将…

《剑指 Offer》专项突破版 - 面试题 65、66 和 67 : 关于前缀树应用的面试题(C++ 实现)

目录 面试题 65 : 最短的单词编码 面试题 66 : 单词之和 面试题 67 : 最大的异或 面试题 65 : 最短的单词编码 题目&#xff1a; 输入一个包含 n 个单词的数组&#xff0c;可以把它们编码成一个字符串和 n 个下标。例如&#xff0c;单词数组 ["time", "me&…

一、环境配置

一、下载Ubuntu18.04版本镜像 我的电脑配置比较低(08年奥运限定版哦)&#xff0c;使用的是虚拟机VMware进行安装Ubuntu18.04版&#xff0c;跟书上使用的一样 Ubuntu 18.04镜像 别下载错了哈 二、VMware下安装Ubuntu18.04操作系统 之前写过相关的博文&#xff0c;详细配置可…

如何选择护眼台灯?2024五大出众品牌护眼台灯推荐

护眼台灯的日常使用非常简便&#xff0c;而且还能提供合适的光照&#xff0c;起到预防近视的效果。但如今市场却有一些劣质护眼台灯&#xff0c;它们的使用体验不佳&#xff0c;还有可能会对眼睛健康造成影响、那么如何选择护眼台灯呢&#xff1f;关于这点今天就将分享几个选购…

用node或者vscode开启一个简单的本地server服务器,加载html网页

使用Live Server 想要加载本地html页面可以快速能让它在你本地浏览器中打开&#xff0c;可以有好多种方式&#xff0c;如果你有使用vscode&#xff0c;可以安装一个插件&#xff1a;Live Server&#xff0c;然后直接在vscode中直接右键就可以开启这个服务&#xff1a; 安装好之…

攻防世界例题wp

1.看到_wakeup()函数第一反应要么触发&#xff0c;要么绕过在这里绕过 2.构造payload实例化一个对象后反序列化 3构造脚本如下&#xff1a; 4.因为它是一个绕过的方法所以我们要使用绕过的方法。 5.继续构造payload将上图的1换成2进行绕过 最终的payload为 O:4:"xctf…

MATLAB_ESP32有限脉冲响应FIR无限脉冲响应IIR滤波器

要点 ESP32闪烁LED&#xff0c;计时LEDESP32基础控制&#xff1a;温控输出串口监控&#xff0c;LCD事件计数器&#xff0c;SD卡读写&#xff0c;扫描WiFi网络&#xff0c;手机控制LED&#xff0c;经典蓝牙、数字麦克风捕捉音频、使用放大器和喇叭、播放SD卡和闪存MP3文件、立体…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候&#xff0c;比如需要开发一个新功能&#xff0c;这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上&#xff0c;然后拉取一个新的分支【gateway】&#xff0c;然后在 gateway分支上进…

社区店选址评估:利用大数据选址的技巧与策略

在当今数字化的时代&#xff0c;利用大数据进行社区店选址评估已成为一种高效、科学的方法。作为一名开鲜奶吧5年的创业者&#xff0c;我将分享一些利用大数据选址的技巧与策略&#xff0c;帮助你找到最适合的店铺位置。 1、确定目标商圈 在选址之前&#xff0c;首先要明确自己…

css实现居中

基础代码&#xff1a; <div class"box"><div class"content"></div> </div> css实现居中的几种方式&#xff1a; 1、flex布局&#xff08;水平垂直&#xff09; .box {width: 200px;height: 200px;background-color: pink;disp…

MySQL入门------数据库与SQL概述

目录 前言 一、数据库相关概念 二、数据模型 1.关系型数据库&#xff08;RDBMS&#xff09; 三、MySQL数据库 1.下载和安装 2.配置环境变量 四、SQL 1.SQL通用语法 2.SQL分类 前言 从本期开始&#xff0c;我们开始学习数据库的相关理论和实践知识&#xff0c;从入门…

把python完全卸载干净

1.winR&#xff0c;输入control回车&#xff0c;点击程序和功能&#xff0c;在搜索框输入python&#xff0c;右键点击卸载 2、找到Python安装路径&#xff0c;把所有文件全部删除。 安装路径可以打开CMD输入&#xff1a;where python 3、强制删除Python.exe 打开cmd&#xff…

2024最新算法:斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)求解23个基准函数(提供MATLAB代码)

一、斑翠鸟优化算法 斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer ,PKO&#xff09;&#xff0c;是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法&#xff0c;它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵感。PKO 算法围绕三个不…

【王道操作系统】ch1计算机系统概述-04操作系统结构

文章目录 【王道操作系统】ch1计算机系统概述-04操作系统结构操作系统的内核操作系统的体系结构考纲新增内容&#xff08;红色为全新内容&#xff0c;黄色为原有内容&#xff09;&#xff1a;01 分层结构02 模块化03 宏内核&#xff08;大内核&#xff09;和微内核04 外核 【王…

C语言-----动态内存管理(1)

1.引入 我们之前已经学习了几种开辟内存空间的方式&#xff1a; &#xff08;1&#xff09;int a10;开辟4个字节大小的空间 &#xff08;2&#xff09;int arr[10]{0}定义数组开辟了一串连续的空间 2.malloc和free (1)malloc开辟内存空间可能会失败&#xff0c;因此需要检查…

基于SpringBoot多模块项目引入其他模块时@Autowired无法注入

基于SpringBoot多模块项目引入其他模块时Autowired无法注入 一、问题描述1、解决方案 一、问题描述 启动Spring Boot项目时报 Could not autowire. No beans of ‘xxxxxxxx’ type found. 没有找到bean的实例&#xff0c;即spring没有实例化对象&#xff0c;也就无法根据配置文…

TCP与UDP基础

思维导图&#xff1a; TCP&#xff1a; 服务器 #include<myhead.h> #define SER_IP "192.168.252.163" #define SER_PORT 6666 int main(int argc, const char *argv[]) {//&#xff11;、创建用于监听的套接字int sfd-1;sfdsocket(AF_INET,SOCK_STREAM,0);/…