Torch基础知识

一、TorchServe避坑指南

1、报错日志1

java.lang.NoSuchMethodError: java.nio.file.Files.readString(Ljava/nio/file/Path;)Ljava/lang/String;
	at org.pytorch.serve.util.ConfigManager.readFile(ConfigManager.java:235)
	at org.pytorch.serve.util.ConfigManager.<init>(ConfigManager.java:139)
	at org.pytorch.serve.util.ConfigManager.init(ConfigManager.java:285)
	at org.pytorch.serve.ModelServer.main(ModelServer.java:83)

解决方案

jdk的版本不对,安装jdk 11

2、报错日志2

2022-06-24T16:46:07,995 [DEBUG] W-9000-mnist_1.0 org.pytorch.serve.wlm.WorkerThread - Backend worker monitoring thread interrupted or backend worker process died.
java.lang.InterruptedException: null
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2056) ~[?:?]
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2133) ~[?:?]
	at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:432) ~[?:?]
	at org.pytorch.serve.wlm.WorkerThread.run(WorkerThread.java:189) [model-server.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]

解决方案

查看启动日志目录log

-rw-rw-r-- 1 user user      0 624 16:41 access_log.log
drwxrwxr-x 2 user user   4096 624 17:17 config/
-rw-rw-r-- 1 user user  68837 624 17:17 model_log.log
-rw-rw-r-- 1 user user      0 624 16:41 model_metrics.log
-rw-rw-r-- 1 user user 184677 624 17:17 ts_log.log
-rw-rw-r-- 1 user user   2492 624 17:17 ts_metrics.log
(torch) user@master:~/code/python/serve/examples/image_classifier/mnist/logs$ more model_log.log 
2022-06-24T16:41:37,286 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Listening on port: /tmp/.ts.sock.9000
2022-06-24T16:41:37,289 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - [PID]2052890
2022-06-24T16:41:37,289 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Torch worker started.
2022-06-24T16:41:37,290 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Python runtime: 3.8.12
2022-06-24T16:41:37,349 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Connection accepted: /tmp/.ts.sock.9000.
2022-06-24T16:41:37,392 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - model_name: mnist, batchSize: 1
2022-06-24T16:41:38,418 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Backend worker process died.
2022-06-24T16:41:38,418 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - Traceback (most recent call last):
2022-06-24T16:41:38,419 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/home/user/.conda/envs/torch/lib/python3.8/site-packages/ts/model_loader.py", line 100, in load
2022-06-24T16:41:38,420 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     module, function_name = self._load_handler_file(handler)
2022-06-24T16:41:38,420 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/home/user/.conda/envs/torch/lib/python3.8/site-packages/ts/model_loader.py", line 162, in _load_handler_file
2022-06-24T16:41:38,421 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     module = importlib.import_module(module_name)
2022-06-24T16:41:38,422 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/home/user/.conda/envs/torch/lib/python3.8/importlib/__init__.py", line 127, in import_module
2022-06-24T16:41:38,423 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     return _bootstrap._gcd_import(name[level:], package, level)
2022-06-24T16:41:38,423 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 1014, in _gcd_import
2022-06-24T16:41:38,424 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 991, in _find_and_load
2022-06-24T16:41:38,424 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 975, in _find_and_load_unlocked
2022-06-24T16:41:38,425 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 671, in _load_unlocked
2022-06-24T16:41:38,427 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 843, in exec_module
2022-06-24T16:41:38,428 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "", line 219, in _call_with_frames_removed
2022-06-24T16:41:38,428 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/tmp/models/4c322bc17dbd478985c9c9888ab9b836/mnist_handler.py", line 2, in <module>
2022-06-24T16:41:38,429 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     from ts.torch_handler.image_classifier import ImageClassifier
2022-06-24T16:41:38,429 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/home/user/.conda/envs/torch/lib/python3.8/site-packages/ts/torch_handler/image_classifier.py", line 8, in <module>
2022-06-24T16:41:38,430 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     from .vision_handler import VisionHandler
2022-06-24T16:41:38,430 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -   File "/home/user/.conda/envs/torch/lib/python3.8/site-packages/ts/torch_handler/vision_handler.py", line 11, in <module>
2022-06-24T16:41:38,431 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG -     from captum.attr import IntegratedGradients
2022-06-24T16:41:38,431 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - ModuleNotFoundError: No module named 'captum'
2022-06-24T16:41:38,432 [INFO ] W-9000-mnist_1.0-stdout MODEL_LOG - 

需要安装captum包, pip install captum即可

二、定义Dataset和Dataloader

1、初始化Dataset

class MyDataSet(Dataset):
    def __init__(self,filepath):
        z = np.loadtxt(filepath,dtype=np.float32,delimiter=',')
        self.x_data = torch.from_numpy(z[:,:-1])
        self.y_data = torch.from_numpy(z[:,[-1]])
        self.len = z.shape[0] #self.len的目的是为了可以知道数据集的个数(759条数据)
        
    def __len__(self):
    	return self.len
    	
    # 定义getitem函数,目的:可以将数据集其中的一条信息按照索引取出
    def __getitem__(self, item):
      return self.x_data[item],self.y_data[item]

2、Dataloader的配置

dataset1 = MyDataSet('diabetes.csv')
dataloader = DataLoader(dataset=dataset1,batch_size=32,shuffle=True,num_workers=2)

DataLoader的参数:

  • dataset =: 使用哪个数据集
  • batch_size =: 将数据集拆成一组多少个进行训练
  • shuffle =: 是否需要打乱数据
  • num_workers =:几个mini_batch并行计算,一般<=你的电脑cpu数目

参考资料
https://blog.csdn.net/wangziyanger/article/details/127373637

你可能感兴趣的:(深度学习,pytorch)