在我的系统上解码 json 响应需要花费大量时间 - Precision 5520(第 11 代 I7,64 GB),Windows 10 Pro 下 WSL2 下搭载 Linux 20.04 LTS。以下是代码的相关部分:
def ms_now():
return int(time.time_ns() / 1000000)
class Timer():
def __init__(self):
self.start = ms_now()
def stop(self):
return ms_now() - self.start
timer = Timer()
response = client.invoke(
FunctionName='my-aws-lambda-function',
Payload=json.dumps({'body': texts}),
)
print("response", timer.stop(), flush=True)
payload_json = response['Payload']
print("payload_json", timer.stop(), flush=True)
result = json.load(payload_json)
print("result", timer.stop(), flush=True)
此代码调用 AWS Lambda 函数。响应包含 38,400 个浮点数。以下是一次运行的输出(时间以毫秒为单位):
response 5619
payload_json 5620
result 76314
反序列化该响应需要一分钟多的时间,但无论如何,该响应并不大。我在 PythonAnywhere 的终端中运行了同样的代码,反序列化花费了 100 毫秒。
我怀疑 WSL 是罪魁祸首。我该如何诊断和修复此问题?
编辑
- 相同的脚本在 Windows 主机上运行良好:
response 1934
payload_json 1934
result 3239
- 由于人们似乎认为是我的 WSL 连接速度很慢,请注意,当我
sentence-transformers
使用 安装具有大量依赖项的包(例如 HuggingFace 的)时pip
,它们的下载速度非常快。
答案1
这个问题在错误报告中进行了讨论 WSL2 的网络速度非常慢 #4901,其中未找到任何解决方案,但列出了许多解决方法。以下是一些按建议相反顺序排列的解决方法。其中一个可能与您的问题有关。
用户 denskh 说:
我的情况是 Win11/WSL2 上的上传速度很慢,约为 3-4Mbps,而下载速度约为 500Mpbs。在 vEthernet (WSL) 虚拟适配器上启用 Netword 直接内存访问解决了这个问题,并将上传速度提高到了 500Mpbs。要检查当前值,请运行:
Get-NetAdapterAdvancedProperty -name "vEthernet (WSL)" -includehidden -DisplayName "Network Direct (RDMA)"
启用:
Set-NetAdapterAdvancedProperty -name "vEthernet (WSL)" -includehidden -DisplayName "Network Direct (RDMA)" -DisplayValue "Enabled"
用户 Jean1995 对 WiFi 的评论:
我目前的解决方法是在我的 WLAN 连接的“属性/共享”选项卡中禁用并重新启用“允许其他网络用户通过此计算机的 Internet 连接进行连接”。
用户 sruester 说:
为我修复了它(安装了英特尔驱动程序的英特尔 I219-V 适配器):
Properties of WSL ethernet adapter Configure ... Advanced "Large Send Offload Version 2 (IPv4)" -> Disabled "Large Send Offload Version 2 (IPv6)" -> Disabled
用户 eugepemi 说:
最后,我尝试从 WSL 的 vEthernet 禁用 IPv6,但在 W11 中它没有出现在控制面板中,阅读 GitHub 后我发现这是因为它是一个隐藏的设备,从 PowerShell 我设法禁用它,现在 WSL 具有正常的网络速度,命令:
Disable-NetAdapterBinding -Name "vEthernet (WSL)" -ComponentID ms_tcpip6 -IncludeHidden
在错误报告本身中可以找到更多的解决方法。