cuda显存超界

1
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 4.07 GiB (GPU 1; 23.65 GiB total capacity; 20.39 GiB already allocated; 2.77 GiB free; 20.42 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

最一开始看不懂为什么已经分配而显卡上却没有进程在跑,后来直接认为它是一个显存超界的bug

RuntimeError: a Tensor with 6 elements cannot be converted to Scalar

计算loss的时候不知道为什么会有一个loss对应好几个元素的情况,在这种情况下要把loss.sum()一下然后再进行.item(),最后完成计算。对于梯度计算的报错,梯度回传只能在scalar的数据上即只有以一个元素的数字数据上才能进行。所以在进行梯度回传计算时也要用.sum

RuntimeError: grad can be implicitly created only for scalar outputsT

这个错误信息 RuntimeError: grad can be implicitly created only for scalar outputs 指的是在使用 PyTorch 进行自动微分时,你试图对非标量输出的张量直接进行反向传播(即调用 .backward()),而没有提供任何梯度参数。在 PyTorch 中,.backward() 用于计算梯度,它默认情况下只适用于标量输出,也就是只有一个元素的张量。如果你的输出是一个向量(即包含多个元素的张量),那么你需要指定一个与这个向量形状相同的张量来作为 .backward() 的参数,这个参数表示对应元素的梯度权重。

以下是一些处理这个错误的方法:

如果你的目标是计算一个标量损失的梯度:确保你的损失函数返回一个标量值。如果返回了一个向量,你可以通过对向量中的元素求和(使用 .sum())来获得一个标量。如果你需要对向量进行反向传播:提供一个与输出向量形状相同的梯度向量给 .backward()。例如,如果你的输出是一个长度为 n 的向量,你可以传递一个同样长度的包含梯度权重的向量(通常是一个全1向量)给 .backward()。
1
2
3
4
5
6
7
8
9
10
import torch
# 假设 output 是一个向量
output = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
# 方法1: 将输出转换为标量并进行反向传播
scalar_output = output.sum()
scalar_output.backward()
# 方法2: 直接对向量进行反向传播,需要提供一个梯度权重向量
gradient = torch.tensor([1.0, 1.0, 1.0])
output.backward(gradient)
在第一个方法中,output.sum() 将输出转换为一个标量,然后对这个标量进行反向传播。在第二个方法中,提供了一个与 output 形状相同的梯度向量给 .backward()。这两种方法都可以解决上述错误。

python的输出到java是乱码 有中文

1
2
3
4
# 解决:强制Python使用UTF-8编码输出
sys.stdout.reconfigure(encoding='utf-8')
# 这个东西看起来是搞编码,其实会改变json格式
print(json.dumps(data, ensure_ascii=False).encode('utf8').decode())

TypeError: Object of type Tensor is not JSON serializable

没解决,但是大体可以知道是python对象的问题,应该是pytorch的某个对象的问题

sorted_df = merged_df.astype({‘chr’:’int’}).sort_values(by=’chr’)

将csv排序,先转化为int然后排序,然后转化为chr

python-javabridge 缺失

WechatIMG21

conda install -c conda-forge python-javabridge

pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=’mirrors.aliyun.com’, port=443): Read timed out.

运行pip install ultralyticsplus==0.0.24 ultralytics==8.0.23时出错,应该是下载超时了,在linux下:

1
2
3
4
export PIP_DEFAULT_TIMEOUT=100
# 或者
pip install --default-timeout=100 ultralyticsplus==0.0.24 ultralytics==8.0.23

ConnectionError: (MaxRetryError(“HTTPSConnectionPool(host=’huggingface.co’, port=443):

huggingface错误

Max retries exceeded with url: /api/models/keremberke/yolov8m-blood-cell-detection/tree/main?recursive=True&expand=False (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x7f0e75028ee0>: Failed to establish a new connection: [Errno 101] Network is unreachable’))”), ‘(Request ID: 82176315-b322-416a-a57c-bf15d75821f3)’)

github workflow

https://zhuanlan.zhihu.com/p/377235637

TypeError: cannot unpack non-iterable float object

消息的第一部分告诉我们,我们遇到了一个 TypeError ,当我们尝试对错误类型的值执行操作时,会发生错误。消息的第二部分告诉我们,我们正在尝试解压缩一个 non-iterable NoneType 对象。

在 Python 中,可迭代对象是可以循环的对象,例如 listtupledictionary .解包是指从可迭代对象中提取值并将它们分配给各个变量。

直接在jupyter中可以一层一层从import点到对应的文件中去。最一开始直接卸载,准备使用github下载的版本,发现这个有点问题,因为没有readme,所以一些包应该没有安装上,所以直接用pip install的方式比较好

jax或者jaxlib没用 (cuda版本)

1
2
3
4
5
6
7
8
9
pip install --upgrade pip

# CUDA 12 installation
# Note: wheels only available on linux.
pip install --upgrade "jax[cuda12_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

# CUDA 11 installation
# Note: wheels only available on linux.
pip install --upgrade "jax[cuda11_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

继续出现To ignore this failure and try to use a fallback algorithm (which may have suboptimal performance), use XLA_FLAGS=–xla_gpu_strict_conv_algorithm_picker=false. Please also file a bug for the root cause of failing autotuning.

试一下XLA_FLAGS=–xla_gpu_strict_conv_algorithm_picker=false,没什么用

重装tensorflow试试

1
2
3
conda search tensorflow
# 显示出来
tensorflow-gpu 2.15.0 cuda118py39h0240f8b_0 anaconda/cloud/conda-forge

conda install tensorflow-gpu=2.15.0

tensorflow不是很懂为什么,只认识23卡,而不认识12卡

还没搞清楚

google问题

困扰了爷爷八百年的google浏览器黑色问题:chrome://flags/#enable-force-dark 第一个disable就行了mlgb

安装steam时的问题

1
curl libc6:amd64 libc6:i386 libegl1:amd64 libegl1:i386 libgbm1:amd64 libgbm1:i386 libgl1-mesa-dri:amd64 libgl1-mesa-dri:i386 libgl1:amd64 libgl1:i386 steam-launcher

联网就好了,实在不行就开个梯子

奇怪的元组问题

这个函数为什么返回一个元组:def get_absolute_image_path(dir,file_name):
  if(dir[-1]=='/'):
      return dir + file_name
return dir + os.sep + file_name

与这个函数无关,在调用的时候之前是多个函数进行同时赋值,结果改称单个的时候忘记改回来了,所以有元组

合并维度不同问题

1
ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 3, the array at index 0 has size 3 and the array at index 1 has size 2	

axis为几表明在哪个维度上做append