HPy:设计新一代Python C扩展API

需积分: 16 0 下载量 161 浏览量 更新于2024-12-24 收藏 185KB ZIP 举报
资源摘要信息:"HPy是针对Python的一项新技术,旨在构建一个更优秀的API以用于Python的C扩展。这项技术的提出是为了解决当前在Python中广泛使用的C API(例如Python/C API)存在的一些问题。这些现有的API通常绑定在CPython的特定实现上,暴露出过多的内部细节,导致它们难以被适配到其他Python实现中,如PyPy、GraalPython、Jython和IronPython等。同时,这种绑定也使得在CPython内部尝试新的实现策略变得困难,例如采用垃圾收集(GC)代替引用计数,或者移除全局解释器锁(GIL)。 为了解决这些问题,HPy项目的目标是设计一个新的API,这个API不仅能够改善当前的不足,还要确保它能够适应未来技术的发展。该API将具有以下目标特性: 1. 兼容性:在不损失(或几乎不损失)性能的情况下,能够兼容当前的CPython实现。 2. 逐步迁移:允许开发者逐步迁移现有的C扩展,以便在新旧API共存的过渡期同时使用。 3. 更好的调试体验:在调试模式下,开发者可以获得关于句柄使用情况的详细通知,比如哪些句柄被保持打开时间过长或者在不应该的情况下被访问。 随着项目的发展,我们可能会看到HPy为Python社区带来以下变化: - 扩展编写将变得更加标准化和简化。 - 多个Python实现之间的兼容性问题将得到缓解。 - 为新的Python实现提供了一个更清晰、更灵活的扩展开发途径。 - 提高了性能和安全性,特别是在涉及大量数据处理和复杂计算的应用中。 HPy项目通过创建一个与具体Python实现无关的API层,使得相同的扩展代码可以在不同的Python实现之间共享,而无需为每一种实现编写专门的C扩展代码。这不仅能够减轻开发者的工作量,还可以让Python社区更快速地采纳和利用新的语言特性或运行时改进。 在社区交流方面,HPy项目通过freenode.net上的IRC频道#hpy和邮件列表来进行讨论和协作。这些平台为有兴趣的开发者和贡献者提供了一个交流想法、解决问题和分享进展的空间。 综上所述,HPy项目提供了对现有Python扩展API的一次重要改进,致力于解决与具体实现相关的限制,并推动Python语言的进一步发展。通过社区的努力,HPy有望在不久的将来成为Python扩展开发的标准。"

Traceback (most recent call last): File "/home/bder73002/hpy/ConvNextV2_Demo/train+.py", line 275, in <module> train_loss, train_acc = train(model_ft, DEVICE, train_loader, optimizer, epoch,model_ema) File "/home/bder73002/hpy/ConvNextV2_Demo/train+.py", line 48, in train loss = torch.nan_to_num(criterion_train(output, targets)) # 计算loss File "/home/bder73002/anaconda3/envs/python3.9.2/lib/python3.9/site-packages/torch/nn/modules/module.py", line 889, in _call_impl result = self.forward(*input, **kwargs) File "/home/bder73002/hpy/ConvNextV2_Demo/models/losses.py", line 56, in forward focal_loss = self.focal_loss(x, target) File "/home/bder73002/anaconda3/envs/python3.9.2/lib/python3.9/site-packages/torch/nn/modules/module.py", line 889, in _call_impl result = self.forward(*input, **kwargs) File "/home/bder73002/hpy/ConvNextV2_Demo/models/losses.py", line 21, in forward return focal_loss(F.cross_entropy(input, target, reduction='none', weight=self.weight), self.gamma) File "/home/bder73002/anaconda3/envs/python3.9.2/lib/python3.9/site-packages/torch/nn/functional.py", line 2693, in cross_entropy return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction) File "/home/bder73002/anaconda3/envs/python3.9.2/lib/python3.9/site-packages/torch/nn/functional.py", line 2388, in nll_loss ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'target' in call to _thnn_nll_loss_forward

2023-05-26 上传