ultralytics 8.1.1 Docs, Solutions and Export updates (#7545)

Co-authored-by: Sergiu Waxmann <47978446+sergiuwaxmann@users.noreply.github.com>
Co-authored-by: Vivek Malvi <malvivivek8198@gmail.com>
Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
Co-authored-by: psaxton <psaxton+github.com@gmail.com>
This commit is contained in:
Glenn Jocher 2024-01-12 16:48:57 +01:00 committed by GitHub
parent 30185e0d4c
commit 83165ffe9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 62 additions and 26 deletions

View file

@ -1,6 +1,7 @@
# Ultralytics YOLO 🚀, AGPL-3.0 license
"""Monkey patches to update/extend functionality of existing functions."""
import time
from pathlib import Path
import cv2
@ -61,7 +62,8 @@ _torch_save = torch.save # copy to avoid recursion errors
def torch_save(*args, **kwargs):
"""
Use dill (if exists) to serialize the lambda functions where pickle does not do this.
Use dill (if exists) to serialize the lambda functions where pickle does not do this. Also adds 3 retries with
exponential standoff in case of save failure to improve robustness to transient issues.
Args:
*args (tuple): Positional arguments to pass to torch.save.
@ -74,4 +76,11 @@ def torch_save(*args, **kwargs):
if "pickle_module" not in kwargs:
kwargs["pickle_module"] = pickle # noqa
return _torch_save(*args, **kwargs)
for i in range(4): # 3 retries
try:
return _torch_save(*args, **kwargs)
except RuntimeError: # unable to save, possibly waiting for device to flush or anti-virus to finish scanning
if i == 3:
raise
time.sleep((2**i) / 2) # exponential standoff 0.5s, 1.0s, 2.0s