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

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

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

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

相关文章

【C++初阶】内存管理

目录 一.C语言中的动态内存管理方式 二.C中的内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 3.浅识抛异常 &#xff08;内存申请失败&#xff09; 4.new和delete操作自定义类型 三.new和delete的实现原理 1.内置类型 2.自定义类型 一.C语…

C++学习笔记:二叉搜索树

二叉搜索树 什么是二叉搜索树?搜索二叉树的操作查找插入删除 二叉搜索树的应用二叉搜索树的代码实现K模型:KV模型 二叉搜索树的性能怎么样? 什么是二叉搜索树? 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树…

Linux安装Nginx详细步骤

1、创建两台虚拟机&#xff0c;分别为主机和从机&#xff0c;区别两台虚拟机的IP地址 2、将Nginx素材内容上传到/usr/local目录&#xff08;pcre,zlib,openssl,nginx&#xff09; 附件 3、安装pcre库   3.1 cd到/usr/local目录 3.2 tar -zxvf pcre-8.36.tar.gz 解压 3.3 cd…

MATLAB图像噪声添加与滤波

在 MATLAB 中添加图像噪声和进行滤波通常使用以下函数&#xff1a; 添加噪声&#xff1a;可以使用imnoise函数向图像添加各种类型的噪声&#xff0c;如高斯噪声、椒盐噪声等。 滤波&#xff1a;可以使用各种滤波器对图像进行滤波处理&#xff0c;例如中值滤波、高斯滤波等。 …

前端学习、HTML

html是由一些标签构成的&#xff0c;标签之间可以嵌套&#xff0c;每个标签都有开始标签和结束标签&#xff0c;也有部分标签只有开始标签&#xff0c;没有结束标签。html的标签也可以成为元素。&#xff08;树形结构&#xff09; html文件的最顶层标签就是html。 head用来放…

**蓝桥OJ 178全球变暖 DFS

蓝桥OJ 178全球变暖 思路: 将每一座岛屿用一个颜色scc代替, 用dx[]和dy[]判断他的上下左右是否需要标记颜色,如果已经标记过颜色或者是海洋就跳过.后面的淹没,实际上就是哪个块上下左右有陆地,那么就不会被淹没,我用一个tag标记,如果上下左右一旦有海洋,tag就变为false.如果tag…

用冒泡排序模拟C语言中的内置快排函数qsort!

目录 ​编辑 1.回调函数的介绍 2. 回调函数实现转移表 3. 冒泡排序的实现 4. qsort的介绍和使用 5. qsort的模拟实现 6. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#xff0c;别忘了给个免…

机器学习:模型评估和模型保存

一、模型评估 from sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 使用测试集进行预测 y_pred model.predict(X_test)# 计算准确率 accuracy accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy*100:.2f}%")# 打印…

整数和浮点数在内存中的存储(大小端字节序,浮点数的存取)

目录 1.整数在内存中的存储 2.大小端字节序和字节序判断 2.1什么是大小端&#xff1f; 2.2为什么会有大小端 3.浮点数在内存中的存储 3.1浮点数的存储 3.1.1 浮点数存的过程 3.1.2 浮点数取的过程 3.2 解析 3.3 验证浮点数的存储方式 1.整数在内存中的存储 整数的二进…

亿道信息轻工业三防EM-T195,零售、制造、仓储一网打尽

厚度仅10.5mm&#xff0c;重量仅0.65千克的EM-T195&#xff0c;其紧凑而纤薄的设计为以往加固型平板带来了全新的轻薄概念。尽管设计时尚、轻薄&#xff0c;但经过军用认证的强固性仍然能够承受所有具有挑战性的环境条件。随身携带无负担的轻便性加上抗震功能使其成为餐厅、酒店…

数独游戏(dfs)

代码注释如下 #include <iostream> using namespace std; const int N 10; bool col[N][N], rol[N][N], cell[3][3][N]; char g[N][N]; bool dfs(int x, int y) { //用bool这样在找到一个方案就可以迅速退出if(y 9) x, y 0; //若y超出边界&#xff0c;则第二…

S1---FPGA硬件板级原理图实战导学

视频链接 FPGA板级实战导学01_哔哩哔哩_bilibili FPGA硬件板级原理图实战导学 【硬件电路设计的方法和技巧-哔哩哔哩】硬件电路设计的方法和技巧01_哔哩哔哩_bilibili&#xff08;40min&#xff09; 【高速板级硬件电路设计-哔哩哔哩】 高速板级硬件电路设计1_哔哩哔哩_bil…

【RT-Thread基础教程】邮箱的使用

文章目录 前言一、邮箱的特性二、邮箱操作函数2.1 创建邮箱创建动态邮箱创建静态邮箱 2.2 删除邮箱2.3 发邮件2.4 取邮件 三、示例代码总结 前言 RT-Thread是一个开源的实时嵌入式操作系统&#xff0c;广泛应用于各种嵌入式系统和物联网设备。在RT-Thread中&#xff0c;邮箱是…

输入一个整数,输出其最长连续因子。

输入一个整数&#xff0c;输出其最长连续因子。 例如 输入&#xff1a;60 输出&#xff1a;2 3 4 5 6 注意&#xff1a;1不算因子 输入输出格式 输入描述: 输入一个整数N&#xff0c;N<10000。 输出描述: 输出其最长连续因子&#xff0c;如果有多个最长&#xff0c;输出…

Linux UnixODBC安装配置

配置 UnixODBC 梦之上关注IP属地: 香港 0.2322020.12.09 13:23:10字数 1,202阅读 5,447 麒麟&达梦适配系列: 1.麒麟服务器上安装 DM8 2.配置 UnixODBC 3.beego-ORM 适配达梦 资源紧张的时候&#xff0c;服务器是大家共用的&#xff0c;上面部署了一堆服务。所以选用doc…

ShardingJdbc实战-分库分表

文章目录 基本配置分库分表的分片策略一、inline 行表达时分片策略algorithm-expression行表达式完整案例和配置如下 二、根据实时间日期 - 按照标准规则分库分表标准分片 - Standard完整案例和配置如下 基本配置 逻辑表 逻辑表是指&#xff1a;水平拆分的数据库或者数据表的相…

大小端问题

0. 介绍 大小端计算机存储数据而安排字节的两种顺序。 针对的是字节。 大端与我们平时书写的顺序一致。 1. 大小端的判定 不需要手动判断。 有一个头文件endian.h; 可能会有宏 __BYTE_ORDER __BIG_ENDIAN __LITTLE_ENDIAN通过库来进行判断。 手动判断 根据字节存取的顺序…

【JSON2WEB】07 Amis可视化设计器CRUD增删改查

总算到重点中的核心内容&#xff0c;CRUD也就是增删改查&#xff0c;一个设计科学合理的管理信息系统&#xff0c;95%的就是CRUD&#xff0c;达不到这个比例要重新考虑一下你的数据库设计了。 1 新增页面 Step 1 启动amis-editor Setp 2 新增页面 名称和路径随便命名&#xf…

Dynamo幕墙探究系列(一)

一直想写个系列教程&#xff0c;但是没有那么多时间整理资料&#xff0c;这次呢&#xff0c;先弄个小系列吧&#xff0c;还是和之前差不多的幕墙测试&#xff0c;我们分几节课&#xff0c;一步一步深入研究。 今天先开个小头儿&#xff0c;要弄的&#xff0c;就是下面这么个模型…

对象锁与类锁

不同锁互不影响&#xff0c;共用一个锁&#xff0c;可能会发生阻塞。 1.在修饰静态方法时&#xff0c;锁定的是当前类的 Class 对象&#xff0c;在下面的例子中就是SycTest1.class 2.当修饰非静态方法时&#xff0c;锁定的就是 this 对象&#xff0c;即当前的实例化对象 public…