如何计算变量的字节大小呢?paperclub分享一下思路,超级简单

在进行嵌入召回时遇到了RPC错误,问题根源可能是发送的消息超过了最大限制。为了解决这个问题,文章提供了一个`cal_size`函数来计算输入数据的大小,无论是numpy数组、列表、字符串还是字节。通过这个函数,作者发现数据大小约为124.95KB,提示需要对数据进行过滤或压缩以避免资源耗尽的问题。

RPC error: [query], <MilvusException: (code=1, message=<_MultiThreadedRendezvous of RPC that terminated with: status = StatusCode.RESOURCE_EXHAUSTED details = "grpc: trying to send message larger than max (69641975 vs. 67108864)" debug_error_string = "UNKNOWN:Error received from peer ipv4:127.0.0.1:19531 {created_time:"2023-05-19T15:28:04.787406541+08:00", grpc_status:8, grpc_message:"grpc: trying to send message larger than max (69641975 vs. 67108864)"}" >)>, <Time:{'RPC start': '2023-05-19 15:28:02.361254', 'RPC error': '2023-05-19 15:28:04.788007'}>

 今天做embedding 召回时遇到一个问题,看了下可能是文件流太大了,于是就像看看 计算一下变量大小、先做一个过滤,用来避免这种请。

paperclub分享如下:

 

代码如下:

def cal_size(inputs):

    """

    文件大小单位换算

    :text: 文件字节

    :return: 返回字节大小对应单位的数值

    """

    def formatter(text):

        units = ["B", "KB", "MB", "GB", "TB", "PB"]

        size = 1024

        for i in range(len(units)):

            if (text / size) < 1:

                return "%.2f %s" % (text, units[i])  # 返回值保留小数点后两位

            text = text / size


 

    if isinstance(inputs, np.ndarray):

        inputs_bytes = inputs.nbytes

    elif isinstance(inputs, list):

        inputs = np.array(inputs)

        inputs_bytes = inputs.nbytes

    elif isinstance(inputs, str):

        inputs = bytes(inputs.encode('utf-8'))

        inputs_bytes = inputs.__sizeof__()

    elif isinstance(inputs, bytes):

        inputs_bytes = inputs.__sizeof__()

    else:

        inputs = bytes(str(inputs).encode('utf-8'))

        inputs_bytes = inputs.__sizeof__()

    print("大小: ", inputs_bytes, " ===>> ",  formatter(inputs_bytes))


 

convert_size(res)
----------------------------------------------------------------

大小: 127952 ===>> 124.95 KB

好家伙,果然不小呀

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值