MartialTerran commited on
Commit
ed874bc
·
verified ·
1 Parent(s): 03d9074

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +117 -1
README.md CHANGED
@@ -1,5 +1,5 @@
1
  Since Huggingface has omitted to publish a standalone pytorch SmolLM2_360M_model.py to load and finetune and run inference of the released model weights and config at https://huggingface.co/HuggingFaceTB/SmolLM2-360M/
2
- I have attempted to construct a model.py that can load and at least do inference mode using the published weights and config. One a functioning pytorch model.py is built, it may be possible to export a torchscript version of the SmolLM2 model that can be implemented on non-python hardware such as MPUs or Risc machines or Smartphones, in edge devices. The SmolLM2_360M_model.py runs but is unable to load the safetensors data. Here is the encountered error:
3
 
4
  C:\Users\User\OneDrive\Desktop\SmolLM2>python SmolLM2_360M_model_debugging.py
5
  Warning: SentencePiece not found, using rudimentary BPE tokenizer. Install SentencePiece for better performance.
@@ -32,6 +32,122 @@ Is there a python script for inspecting the safetensors file?
32
  Why does model.safetensors file "not contain tensor lm_head.weight"?
33
 
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  ---
36
  license: apache-2.0
37
  ---
 
1
  Since Huggingface has omitted to publish a standalone pytorch SmolLM2_360M_model.py to load and finetune and run inference of the released model weights and config at https://huggingface.co/HuggingFaceTB/SmolLM2-360M/
2
+ I have attempted to construct a pytorch model.py that can load and at least do inference mode using the published weights and config. One a functioning pytorch model.py is built, it may be possible to export a torchscript version of the SmolLM2 model that can be implemented on non-python hardware such as MPUs or Risc machines or Smartphones, in edge devices. The SmolLM2_360M_model.py runs but is unable to load the safetensors data. Here is the encountered error:
3
 
4
  C:\Users\User\OneDrive\Desktop\SmolLM2>python SmolLM2_360M_model_debugging.py
5
  Warning: SentencePiece not found, using rudimentary BPE tokenizer. Install SentencePiece for better performance.
 
32
  Why does model.safetensors file "not contain tensor lm_head.weight"?
33
 
34
 
35
+ # Help Needed: Building a Standalone PyTorch SmolLM2-360M Model
36
+
37
+ The Hugging Face Hub hosts the SmolLM2-360M model ([HuggingFaceTB/SmolLM2-360M](https://huggingface.co/HuggingFaceTB/SmolLM2-360M/)), but currently lacks a standalone PyTorch `model.py` file for loading, fine-tuning, and inference. This limits the model's usability outside the Hugging Face ecosystem.
38
+
39
+ I've started creating a `SmolLM2_360M_model.py` file to address this gap, aiming for compatibility with all SmolLM2 models. The initial goal is to enable inference using the published weights and config. A successful PyTorch implementation would pave the way for exporting a TorchScript version, broadening accessibility to non-Python environments like microcontrollers, RISC-V machines, smartphones, and other edge devices.
40
+
41
+ **The Challenge:**
42
+
43
+ While my `SmolLM2_360M_model.py` runs, it encounters problems loading the `safetensors` data. I'm receiving the following error:
44
+
45
+ ```
46
+ # Insert the full error message here, including traceback. This will help others diagnose the problem quickly.
47
+ # For example:
48
+ Traceback (most recent call last):
49
+ File "SmolLM2_360M_model.py", line 32, in <module>
50
+ model.load_state_dict(torch.load("pytorch_model.bin"))
51
+ File ".../python3.8/site-packages/torch/serialization.py", line 781, in load
52
+ with _open_file_like(f, 'rb') as opened_file:
53
+ FileNotFoundError: [Errno 2] No such file or directory: 'pytorch_model.bin'
54
+
55
+ ```
56
+
57
+ **Call to Action:**
58
+
59
+ I'm seeking assistance from experienced PyTorch developers to debug the loading issue and complete the `SmolLM2_360M_model.py` implementation. Your contributions will significantly expand the potential applications of SmolLM2.
60
+
61
+ **Specific Areas Where Help is Needed:**
62
+
63
+ * **Safetensors Loading:** Resolving the error encountered when loading the model weights from the safetensors file.
64
+ * **Model Architecture Verification:** Confirming the correctness of the PyTorch model architecture based on the config file.
65
+ * **Inference Implementation:** Ensuring the model can perform inference correctly.
66
+ * **Fine-tuning Support (Optional):** Adding functionality for fine-tuning the model on downstream tasks.
67
+ * **TorchScript Export (Optional):** Enabling export to TorchScript for deployment on resource-constrained devices.
68
+
69
+ **How to Contribute:**
70
+
71
+ 1. Fork the repository containing the `SmolLM2_360M_model.py` file.
72
+ 2. Debug the code and implement the missing functionality.
73
+ 3. Submit a pull request with your changes.
74
+
75
+ By working together, we can make SmolLM2 more accessible and empower a wider range of users to leverage its capabilities. Thank you for your time and expertise!
76
+
77
+
78
+ P.S. Here's a technical breakdown of the process for creating a TorchScript version of the model and deploying it to various platforms:
79
+
80
+ **1. TorchScript Creation:**
81
+
82
+ * **Trace or Script:** TorchScript offers two ways to convert your PyTorch model: tracing and scripting. Tracing records the operations performed on example inputs, creating a static graph. Scripting directly parses the model code, supporting control flow. Scripting is preferred if your model uses dynamic control flow.
83
+ ```python
84
+ # Tracing Example
85
+ example_input = torch.randn(1, 3, 224, 224) # Example input
86
+ traced_model = torch.jit.trace(model, example_input)
87
+
88
+ # Scripting Example
89
+ scripted_model = torch.jit.script(model)
90
+ ```
91
+
92
+ * **Optimization (Optional):** TorchScript provides optimization passes to improve the performance of the exported model.
93
+ ```python
94
+ optimized_model = torch.jit.optimize_for_inference(scripted_model)
95
+ ```
96
+
97
+ * **Saving:** Save the TorchScript model to a file.
98
+ ```python
99
+ torch.jit.save(optimized_model, "smolLM2_360m.pt")
100
+ ```
101
+
102
+ **2. Deployment to Target Environments:**
103
+
104
+ * **C++:** LibTorch, the C++ API for PyTorch, can load and execute TorchScript models. Integrate `libTorch` into your C++ application for microcontroller, RISC-V, or other edge device deployments. This typically involves compiling your C++ code and linking against `libTorch`.
105
+
106
+ * **Android/iOS:** Use the respective PyTorch Mobile libraries for these platforms. These libraries offer optimized runtime environments for executing TorchScript models within mobile applications.
107
+
108
+ * **Other Edge Devices:** Depending on the device and its capabilities, explore options like using a custom runtime, or if available, a cross-compilation toolchain to target the device from your development environment.
109
+
110
+ **Example C++ Deployment (Simplified):**
111
+
112
+ ```c++
113
+ #include <torch/script.h>
114
+
115
+ int main() {
116
+ // Load the TorchScript model
117
+ torch::jit::script::Module module = torch::jit::load("smolLM2_360m.pt");
118
+
119
+ // Prepare input tensor
120
+ // ... (Device-specific input tensor preparation) ...
121
+
122
+ // Run inference
123
+ std::vector<torch::jit::IValue> inputs;
124
+ inputs.push_back(input_tensor); // Add input tensor(s)
125
+ auto output = module.forward(inputs);
126
+
127
+ // Process output
128
+ // ... (Handle output tensor on the device) ...
129
+
130
+ return 0;
131
+ }
132
+ ```
133
+
134
+ **Key Considerations:**
135
+
136
+ * **Hardware Limitations:** Microcontrollers and other edge devices have limited resources. Model size and complexity may need adjustments (quantization, pruning) for optimal performance.
137
+
138
+ * **Platform-Specific Tooling:** Each target platform has its own build system and toolchain. Familiarize yourself with these tools for successful deployment.
139
+
140
+ * **Cross-Compilation:** If building directly on the target device isn't feasible, cross-compilation is necessary. This typically involves setting up a cross-compilation toolchain for the target architecture.
141
+
142
+ * **Debugging:** Debugging on edge devices can be challenging. Thoroughly testing the TorchScript model within a more accessible environment (e.g., your development machine) before deploying is essential.
143
+
144
+
145
+ This expanded explanation provides a more complete roadmap for creating and deploying TorchScript versions of the SmolLM2 model. Remember to consult the official PyTorch and LibTorch documentation for platform-specific instructions and best practices.
146
+
147
+
148
+
149
+
150
+
151
  ---
152
  license: apache-2.0
153
  ---