小编Cha*_*ker的帖子

如何解决 conda 不可写路径的问题?

为什么我在使用 conda 时会看到以下错误(通常是在安装软件包或制作新 envs 时)以及如何修复它:

Verifying transaction: | WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt
Run Code Online (Sandbox Code Playgroud)

或者

Preparing transaction: done
Verifying transaction: - WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt

done
Executing transaction: - WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
  environment location: /Users/brandomiranda/miniconda3/envs/myenv
  registry file: /Users/brandomiranda/.conda/environments.txt
done
Run Code Online (Sandbox Code Playgroud)

可以在以下 gitissue 上找到我所做工作的详细概述:

https://github.com/conda/conda/issues/7267

除了从头开始重新安装 conda 并运行以下命令之外,这真的没什么特别的:

bash Miniconda3-latest-MacOSX-x86_64.sh
Run Code Online (Sandbox Code Playgroud)

它安装了这个版本的 conda:

? conda -V
conda 4.7.12
Run Code Online (Sandbox Code Playgroud)

导致我警告的命令示例: …

python anaconda conda

21
推荐指数
2
解决办法
1万
查看次数

如何解决著名的“未处理的 cuda 错误,NCCL 版本 2.7.8”错误?

我见过多个有关以下问题的问题:

RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1614378083779/work/torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled cuda error, NCCL version 2.7.8
ncclUnhandledCudaError: Call to CUDA function failed.
Run Code Online (Sandbox Code Playgroud)

但似乎没有人能帮我解决这个问题:

我尝试torch.cuda.set_device(device)在每个脚本的开头手动执行。这似乎对我不起作用。我尝试过不同的 GPU。我尝试过降级pytorch版本和cuda版本。1.6.0、1.7.1、1.8.0 和 cuda 10.2、11.0、11.1 的不同组合。我不确定还能做什么。人们做了什么来解决这个问题?


也许非常相关?


更完整的错误消息:

('jobid', 4852)
('slurm_jobid', -1)
('slurm_array_task_id', -1)
('condor_jobid', 4852)
('current_time', 'Mar25_16-27-35')
('tb_dir', PosixPath('/home/miranda9/data/logs/logs_Mar25_16-27-35_jobid_4852/tb'))
('gpu_name', 'GeForce GTX TITAN X')
('PID', '30688')
torch.cuda.device_count()=2

opts.world_size=2

ABOUT TO SPAWN WORKERS
done setting sharing strategy...next mp.spawn
INFO:root:Added key: store_based_barrier_key:1 to store for rank: 1
INFO:root:Added key: store_based_barrier_key:1 to store …
Run Code Online (Sandbox Code Playgroud)

distributed-computing distributed-system pytorch

20
推荐指数
1
解决办法
3万
查看次数

是否同时进行单元测试?

go test被运行它运行在您的文件,在结束_test.go通过运行启动格式的功能TestXxx和使用(*T testing.T)模块.我想知道_test.go文件中的每个函数是否同时运行,或者它是否分别运行每个函数?它是否为每一个创建了一个例程?如果它确实为每个人创建了一个例程,我可以用某种方式监控go例程吗?是否有可能golibrary.GoRoutines()为每个人做一些事情并获得一个实例,并监控他们一些类似的东西?


注意:这个问题假设您使用go(测试)附带的测试框架.

unit-testing go

18
推荐指数
4
解决办法
1万
查看次数

在OSX中使matplotlib在虚拟环境中工作的最简单方法是什么?

我刚刚发现matplotlib虚拟环境存在问题.我尝试了常见问题解答中的解决方案,但它们无效.一个理想的解决方案应该只涉及pip命令,但要求它可能是困难的或不现实的.无论如何,我尝试了他们在OS X部分上的内容,framework在你的venv文件夹中创建一个bash文件并通过它运行命令.

$ frameworkpython krls.py
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到了一个允许deniel错误:

Permission denied
Run Code Online (Sandbox Code Playgroud)

我有点害怕sudoing命令,我不是100%他们做什么...无论如何,似乎bash脚本没有做任何太危险的事情所以我继续前进并sudo-ed它.然而,我的终端的反应很奇怪,它说:

sudo frameworkpython krsl.py
sudo: frameworkpython: command not found
Run Code Online (Sandbox Code Playgroud)

这意味着它不能识别frameworkpython为命令.没有sudo,它说:

frameworkpython krsl.py -bash:/ Users/my_name/path/venv/bin/frameworkpython:权限被拒绝

它似乎将frameworkpython识别为命令(?)但由于权限而没有执行它?这对我来说似乎很奇怪.任何想法?


我也尝试过:

$ pip install TKAgg
Collecting TKAgg
  Could not find a version that satisfies the requirement TKAgg (from versions: )
No matching distribution found for TKAgg
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

所以我尝试了下一个使用PySide的选项,它也没有用,并给出了一个巨大的错误输出:

$ pip install pyside
Collecting pyside
  Using cached PySide-1.2.4.tar.gz
Building wheels for collected packages: pyside
  Running setup.py …
Run Code Online (Sandbox Code Playgroud)

python macos bash matplotlib

17
推荐指数
2
解决办法
6907
查看次数

copy_initial_weights 文档在 Pytorch 的更高库中是什么意思?

我试图使用更高的库进行元学习,但我在理解其copy_initial_weights含义时遇到了问题。文档说:

copy_initial_weights - 如果为真,则修补模块的权重被复制以形成修补模块的初始权重,因此在展开修补模块时不是梯度带的一部分。如果将其设置为 False,则实际模块权重将是修补模块的初始权重。例如,这在执行 MAML 时很有用。

但这对我来说没有多大意义,因为以下几点:

例如,“修补模块的权重被复制以形成修补模块的初始权重”对我来说没有意义,因为当上下文管理器启动时,修补模块还不存在。所以不清楚我们从哪里复制什么(以及为什么复制是我们想要做的事情)。

此外,“展开修补模块”对我来说没有意义。我们通常展开由 for 循环引起的计算图。一个补丁模块只是一个被这个库修改过的神经网络。展开是模棱两可的。

此外,“渐变胶带”没有技术定义。

此外,在描述 false 是什么时,说它对 MAML 有用实际上并没有用,因为它甚至没有暗示为什么它对 MAML 有用。

总的来说,不可能使用上下文管理器。

以更精确的术语解释该标志的作用的任何解释和示例都将非常有价值。


有关的:

machine-learning deep-learning pytorch

15
推荐指数
1
解决办法
534
查看次数

当 CPU 仅在 pytorch 中可用时,如何并行化一个批次的训练循环样本?

我想并行处理单个示例或一批示例(在我的情况下,我只有 cpus,我有多达 112 个)。我试过了,但我得到一个错误,即损失不能从单独的进程中产生梯度(这完全破坏了我的尝试)。我仍然想这样做,并且在多重处理发生后我可以做一个优化器步骤是必不可少的。我该如何解决?我做了一个完全独立的例子:


import torch
import torch.nn as nn
from torch.optim.lr_scheduler import StepLR
from torch.utils.data import Dataset, DataLoader

from torch.multiprocessing import Pool

class SimpleDataSet(Dataset):

    def __init__(self, Din, num_examples=23):
        self.x_dataset = [torch.randn(Din) for _ in range(num_examples)]
        # target function is x*x
        self.y_dataset = [x**2 for x in self.x_dataset]

    def __len__(self):
        return len(self.x_dataset)

    def __getitem__(self, idx):
        return self.x_dataset[idx], self.y_dataset[idx]

def get_loss(args):
    x, y, model = args
    y_pred = model(x)
    criterion = nn.MSELoss()
    loss = criterion(y_pred, y)
    return loss

def get_dataloader(D, num_workers, …
Run Code Online (Sandbox Code Playgroud)

machine-learning multiprocessing deep-learning conv-neural-network pytorch

14
推荐指数
1
解决办法
565
查看次数

如何正确设置特定模块以在 VS 代码中进行调试?

我正在按照VS code 网站说明进行操作,但似乎我尝试的任何方法都不起作用。

我根据需要创建了一个新配置,但是每当我放置路径时,它都拒绝在 VS 代码中工作,尽管当我手动调用它时,VS 代码在集成终端窗口中抱怨的路径工作正常。

调试器抛出的错误如下:

(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/experiments ? env PTVSD_LAUNCHER_PORT=59729 /Users/brandomiranda/miniconda3/envs/automl-meta-learning/bin/python /Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher -m /Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization.py 
E+00000.025: Error determining module path for sys.argv

             Traceback (most recent call last):
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/../ptvsd/server/cli.py", line 220, in run_module
                 spec = find_spec(options.target)
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/importlib/util.py", line 94, in find_spec
                 parent = __import__(parent_name, fromlist=['__path__'])
             ModuleNotFoundError: No module named '/Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization'

             Stack where logged:
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/runpy.py", line 193, in _run_module_as_main
                 "__main__", mod_spec)
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/runpy.py", line 85, in _run_code
                 exec(code, run_globals)
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/__main__.py", line 45, …
Run Code Online (Sandbox Code Playgroud)

python visual-studio-code vscode-debugger

13
推荐指数
1
解决办法
2233
查看次数

如何使用交互式会话在远程 VS 代码的调试会话中运行代码?

我正在使用一个集群(类似于 slurm 但使用condor),我想使用 VS 代码(特别是它的调试器)运行我的代码,它是远程同步扩展

我尝试在 VS 代码中使用我的调试器运行它,但它并没有像预期的那样工作。

首先,我像往常一样使用 VS 代码和远程同步登录到集群,效果很好。然后我继续使用以下命令获取交互式作业:

condor_submit -i request_cpus=4 request_gpus=1
Run Code Online (Sandbox Code Playgroud)

然后成功地提供了一个节点/gpu 来使用。

一旦我尝试运行调试器,但它以某种方式将我从远程会话中注销(看起来它从打印语句转到头节点)。那不是我想要的。我想在我分配的节点/gpu 的交互式会话中运行我的工作。为什么 VS 代码在错误的地方运行它?我怎样才能在正确的地方运行它?


集成终端的一些输出:

source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py 
conda activate base
(automl-meta-learning) miranda9~/automl-meta-learning $ source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
(automl-meta-learning) miranda9~/automl-meta-learning $ /home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py 
--> main in differentiable SGD
hello world torch_utils!
vision-sched.cs.illinois.edu
Files already downloaded and verified
Files already downloaded and verified
Files already downloaded and verified
-> initialization of DiMO done!

---> i = 0, …
Run Code Online (Sandbox Code Playgroud)

cluster-computing visual-studio slurm

12
推荐指数
3
解决办法
2597
查看次数

Pytorch张量中的detach,clone和deepcopy有什么区别?

我一直在努力理解.clone(),.detach()copy.deepcopy使用 Pytorch 时的区别。特别是 Pytorch 张量。

我试着写下我所有关于它们的差异和用例的问题,很快就不知所措,并意识到也许拥有 Pytorch 张量的 4 个主要属性会更好地阐明在每个小问题中使用哪个。我意识到需要跟踪的 4 个主要属性是:

  1. 如果有一个指向张量的新指针/引用
  2. 如果有一个新的张量对象实例(因此很可能这个新实例有它自己的元数据,例如require_grads,形状is_leaf等)
  3. 如果它为张量数据分配了新的内存(即,如果这个新张量是不同张量的视图)
  4. 如果它正在跟踪操作历史记录(或者即使它正在跟踪一个全新的操作历史记录或在深度复制的情况下相同的旧操作历史记录)

根据从 Pytorch 论坛和文档中挖掘出来的内容,这是我目前在张量上使用时的区别:

克隆

对于克隆:

x_cloned = x.clone()
Run Code Online (Sandbox Code Playgroud)

我相信这就是它根据主要 4 个属性的行为方式:

  1. 克隆x_cloned 有自己的python引用/指向新对象的指针
  2. 它创建了自己的新张量对象实例(带有单独的元数据)
  3. 它已经为x_new与相同的数据分配了一个新的内存x
  4. 它跟踪操作的原始历史记录,此外还包括此clone操作作为.grad_fn=<CloneBackward>

据我所知,它的主要用途似乎是创建事物的副本,以便inplace_操作安全。此外,加上.detachas .detach().clone()(顺便说一句,“更好”的顺序)它创建了一个全新的张量,该张量已与旧历史分离,从而阻止梯度流过该路径。

分离

x_detached = x.detach()
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个新的 python 引用(x_new = x当然唯一没有的)。id我相信可以使用这个
  2. 它创建了自己的新张量对象实例(带有单独的元数据)
  3. 没有x_detached与 x 相同的数据分配新的内存
  4. 它切断了梯度的历史,不允许它流过它。我认为认为它没有历史是正确的,作为一个全新的张量。 …

python machine-learning pytorch

12
推荐指数
1
解决办法
1843
查看次数

在 Pytorch 中应该在哪里调用 torch.distributed.destroy_process_group() ?

我注意到文档没有这个功能。因此,不清楚应该在哪里调用它。是否必须:

  1. 在每个工作代码的末尾调用它(即在 mp.spawn 内部)
  2. 或者在 mp.spawn 之外调用它,即通过主进程

请注意,有一个 gitissue 请求将此函数放在文档中: https: //github.com/pytorch/pytorch/issues/48203

这是 2 含义的示例:

def test_setup():
    print('test_setup')
    if torch.cuda.is_available():
        world_size = torch.cuda.device_count()
    else:
        world_size = 4
    master_port = find_free_port()
    mp.spawn(setup_process, args=(world_size, master_port), nprocs=world_size)
    dist.destroy_process_group()
    print('successful test_setup!')
Run Code Online (Sandbox Code Playgroud)

machine-learning distributed-computing neural-network conv-neural-network pytorch

12
推荐指数
1
解决办法
1675
查看次数