解决 AS 运行时,华为手机不打印 Log 的问题

本文介绍如何在华为畅享7S及其它华为手机型号中通过特定代码打开工程菜单,并进入后台设置,开启APLOG设置的方法,适用于遇到相关问题的用户。

我的手机是华为畅享7S,华为其他型号手机的解决方法类似。

问题如文章标题,解决方法:

1、在拨号键盘输入*##2846579##*,系统会自动打开【工程菜单】界面。

2、打开【后台设置】 → 【AP LOG设置】,选择【打开】

3、重启Android Studio,重启软件

<think>我们正在讨论的是华为昇腾(Ascend)NPU,而是NVIDIA GPU。CUDA_VISIBLE_DEVICES是NVIDIA GPU的环境变量,用于控制可见的GPU设备。在昇腾NPU上,这个环境变量是无效的,因为昇腾使用同的软件栈和运行环境。 在昇腾NPU上,我们使用华为的CANN(Compute Architecture for Neural Networks)软件栈。对于设备可见性的控制,昇腾提供了自己的环境变量:`ASCEND_VISIBLE_DEVICES`。 因此,用户遇到的问题是在昇腾NPU上使用`CUDA_VISIBLE_DEVICES`无效,这是因为这个环境变量只适用于NVIDIA GPU。在昇腾平台上,应该使用`ASCEND_VISIBLE_DEVICES`。 下面详细说明在昇腾NPU上如何控制设备可见性: ### 1. **昇腾NPU设备管理环境变量** - **`ASCEND_VISIBLE_DEVICES`**:控制昇腾NPU设备的可见性,类似于`CUDA_VISIBLE_DEVICES`。 - 格式:逗号分隔的设备ID列表,例如:`0,1,2` - 示例:`export ASCEND_VISIBLE_DEVICES=0,2` 表示只对当前进程可见设备0和设备2。 ### 2. **在分布式训练中的使用** 当使用华为的分布式训练框架(如`torch_npu`+`hccl`),需要配合`ASCEND_VISIBLE_DEVICES`和相应的进程启动工具(如`torch.distributed.launch`)来设置每个进程使用的设备。 例如,假设一个节点有4个NPU设备(设备ID为0,1,2,3),我们想使用两个设备进行训练(每个设备一个进程): ```bash export ASCEND_VISIBLE_DEVICES=0,1 # 设置当前shell可见的设备0和1 python -m torch.distributed.launch --nproc_per_node=2 train.py ``` 在代码中,我们通过`local_rank`来指定每个进程使用的设备: ```python import torch import torch_npu # 导入torch_npu以支持NPU设备 # 解析分布式参数 parser = argparse.ArgumentParser() parser.add_argument("--local_rank", type=int) args = parser.parse_args() # 设置当前进程使用的NPU设备 device = torch.device(f'npu:{args.local_rank}') torch.npu.set_device(device) # 初始化分布式进程组 torch.distributed.init_process_group( backend='hccl', # 华为昇腾的通信后端 init_method='env://' ) model = MyModel().to(device) # 使用DDP包装模型(注意:这里使用torch_npu的DDP,但PyTorch1.8+已支持NPU的DDP) model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank]) ``` ### 3. **注意事项** - **环境变量设置位置**:`ASCEND_VISIBLE_DEVICES`必须在启动训练脚本之前设置,通常是在shell中设置。 - **与`local_rank`的配合**:在代码中,我们使用`local_rank`来指定每个进程使用哪个可见设备。例如,当`ASCEND_VISIBLE_DEVICES=0,1`,两个进程的`local_rank`分别为0和1,分别使用设备`npu:0`和`npu:1`(注意:这里的0和1是逻辑设备号,对应物理设备0和1)。 - **设备数量检查**:在代码中可以通过`torch.npu.device_count()`来获取可见NPU设备的数量。 ### 4. **验证设备绑定** 可以在每个进程中打印当前设备信息: ```python print(f"Process {args.local_rank} is using NPU: {torch.npu.current_device()}") ``` ### 5. **常见问题** - **问题1**:`ASCEND_VISIBLE_DEVICES`设置后,`torch.npu.device_count()`返回的数量与设置一致。 - 检查环境变量是否正确设置,是否有其他进程修改了环境变量。 - **问题2**:运行报错,提示设备可用。 - 确保`ASCEND_VISIBLE_DEVICES`设置的设备ID是有效的(通过`npu-smi info`查看可用设备)。 ### 6. **与NVIDIA GPU编程的差异** 昇腾NPU的编程模型与NVIDIA GPU同,它有自己的编程接口(如AscendCL)和算子开发语言(Ascend C)。但是,对于PyTorch用户,华为提供了`torch_npu`库,使得在昇腾NPU上运行PyTorch代码与在NVIDIA GPU上类似。过,环境变量的名称同。 ### 总结 在昇腾NPU上,使用`CUDA_VISIBLE_DEVICES`无效,应使用`ASCEND_VISIBLE_DEVICES`来控制可见设备。在分布式训练中,配合`torch.distributed.launch`的`--nproc_per_node`参数,并在代码中通过`local_rank`来设置每个进程使用的设备。 §§相关问题§§ 1. 如何在昇腾NPU上运行单卡训练? 2. 昇腾NPU分布式训练中如何设置多机多卡? 3. 如何查看昇腾NPU的设备状态和使用情况? 4. 昇腾NPU与NVIDIA GPU在分布式训练中的主要区别是什么?</think>### 华为昇腾NPU设备可见性控制方案 在昇腾NPU环境中,`CUDA_VISIBLE_DEVICES`是无效的,因为这是NVIDIA GPU特有的环境变量。昇腾平台使用完全同的设备管理机制,需要采用昇腾特定的环境变量和控制方法。 #### 1. **昇腾设备管理核心机制** - **替代环境变量**: - `ASCEND_VISIBLE_DEVICES`:控制可见的NPU设备 - `ASCEND_GLOBAL_LOG_LEVEL`:设置日志级别(0~3) - `ASCEND_AICPU_PATH`:指定AI CPU算子库路径 - **设备选择原理**: $$ \text{可见设备数} = \text{ASCEND_VISIBLE_DEVICES指定的设备数} $$ $$ \text{进程数} \leq \text{可见设备数} $$ #### 2. **分布式训练代码适配** ```python import torch import torch_npu # 必须导入以启用NPU支持 from torch.nn.parallel import DistributedDataParallel as DDP def main(): # 解析昇腾注入的本地设备ID parser = argparse.ArgumentParser() parser.add_argument("--local_rank", type=int, default=0) args = parser.parse_args() # 设置当前进程的NPU设备 (关键步骤) device_id = args.local_rank torch.npu.set_device(f'npu:{device_id}') # 绑定到指定NPU[^1] # 初始化HCCL通信后端 (昇腾专用) dist.init_process_group( backend="hccl", # 华为集合通信库 init_method="env://" ) # 模型部署到NPU model = YourModel().npu() # 使用当前设置的NPU # DDP包装模型 model = DDP(model, device_ids=[device_id]) if __name__ == "__main__": main() ``` #### 3. **启动命令示例** ```bash # 设置可见NPU设备 (物理设备0,1) export ASCEND_VISIBLE_DEVICES=0,1 # 启动分布式训练 python -m torch.distributed.launch \ --nproc_per_node=2 \ # 进程数=可见设备数 --nnodes=1 \ train.py ``` #### 4. **设备映射验证方法** ```python # 检查实际可见设备数 visible_npus = torch.npu.device_count() print(f"可见NPU数量: {visible_npus}") # 应与ASCEND_VISIBLE_DEVICES一致 # 验证当前进程设备绑定 current_npu = torch.npu.current_device() print(f"进程{args.local_rank} -> NPU:{current_npu}") ``` #### 5. **常见问题解决** 1. **设备可见错误**: - 检查`ASCEND_VISIBLE_DEVICES`设置是否正确 - 运行`npu-smi info`确认物理设备状态 2. **HCCL通信失败**: ```python # 在init_process_group前添加 os.environ['HCCL_WHITELIST_DISABLE'] = '1' # 禁用白名单检查[^1] ``` 3. **内存足**: - 确认`nproc_per_node`超过可见NPU数量 - 使用`npu-smi`监控设备内存使用 > **核心区别**:昇腾使用`ASCEND_VISIBLE_DEVICES`+`HCCL`替代NVIDIA的`CUDA_VISIBLE_DEVICES`+`NCCL`方案[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值