Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Misc fixes for the demo app. #6051

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
460 changes: 0 additions & 460 deletions examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,9 @@ class RunnerHolder: ObservableObject {

extension UIImage {
func resized(to newSize: CGSize) -> UIImage {
let format = UIGraphicsImageRendererFormat.default()
let renderer = UIGraphicsImageRenderer(size: newSize, format: format)
let image = renderer.image { _ in
UIGraphicsImageRenderer(size: newSize).image { _ in
draw(in: CGRect(origin: .zero, size: newSize))
}
return image
}

func toRGBArray() -> [UInt8]? {
Expand Down Expand Up @@ -71,10 +68,10 @@ extension UIImage {
let g = UInt8(pixelData[pixelIndex + 1])
let b = UInt8(pixelData[pixelIndex + 2])

let rgbIndex = (y * width + x)
let rgbIndex = (y * width + x) * 3
rgbArray[rgbIndex] = r
rgbArray[rgbIndex + height * width] = g
rgbArray[rgbIndex + 2 * height * width] = b
rgbArray[rgbIndex + 1] = g
rgbArray[rgbIndex + 2] = b
}
}

Expand Down Expand Up @@ -207,33 +204,34 @@ struct ContentView: View {
}
}
.navigationBarTitle(title, displayMode: .inline)
.navigationBarItems(leading:
Button(action: {
showingSettings.toggle()
}) {
Image(systemName: "gearshape")
.imageScale(.large)
})
.navigationBarItems(trailing:
HStack {
Menu {
Section(header: Text("Memory")) {
Text("Used: \(resourceMonitor.usedMemory) Mb")
Text("Available: \(resourceMonitor.availableMemory) Mb")
}
} label: {
Text("\(resourceMonitor.usedMemory) Mb")
}
.onAppear {
resourceMonitor.start()
}
.onDisappear {
resourceMonitor.stop()
}
Button(action: { showingLogs = true }) {
Image(systemName: "list.bullet.rectangle")
}
}
.navigationBarItems(
leading:
Button(action: {
showingSettings.toggle()
}) {
Image(systemName: "gearshape")
.imageScale(.large)
},
trailing:
HStack {
Menu {
Section(header: Text("Memory")) {
Text("Used: \(resourceMonitor.usedMemory) Mb")
Text("Available: \(resourceMonitor.usedMemory) Mb")
}
} label: {
Text("\(resourceMonitor.usedMemory) Mb")
}
.onAppear {
resourceMonitor.start()
}
.onDisappear {
resourceMonitor.stop()
}
Button(action: { showingLogs = true }) {
Image(systemName: "list.bullet.rectangle")
}
}
)
.sheet(isPresented: $showingLogs) {
NavigationView {
Expand Down Expand Up @@ -274,20 +272,24 @@ struct ContentView: View {
isGenerating = true
shouldStopGenerating = false
shouldStopShowingToken = false
let text = prompt
let text = prompt.trimmingCharacters(in: .whitespacesAndNewlines)
let seq_len = 768 // text: 256, vision: 768
let modelPath = resourceManager.modelPath
let tokenizerPath = resourceManager.tokenizerPath
let useLlama = modelPath.range(of: "llama", options: .caseInsensitive) != nil
let useLlama = modelPath.lowercased().contains("llama")

prompt = ""
hideKeyboard()
showingSettings = false

messages.append(Message(text: text))
messages.append(Message(type: useLlama ? .llamagenerated : .llavagenerated))

runnerQueue.async {
defer {
DispatchQueue.main.async {
isGenerating = false
selectedImage = nil
}
}

Expand All @@ -299,10 +301,7 @@ struct ContentView: View {

guard !shouldStopGenerating else { return }
if useLlama {
messages.append(Message(text: text))
messages.append(Message(type: .llamagenerated))

if let runner = runnerHolder.runner, !runner.isloaded() {
if let runner = runnerHolder.runner, !runner.isLoaded() {
var error: Error?
let startLoadTime = Date()
do {
Expand Down Expand Up @@ -332,10 +331,7 @@ struct ContentView: View {
}
}
} else {
messages.append(Message(text: text))
messages.append(Message(type: .llavagenerated))

if let runner = runnerHolder.llavaRunner, !runner.isloaded() {
if let runner = runnerHolder.llavaRunner, !runner.isLoaded() {
var error: Error?
let startLoadTime = Date()
do {
Expand Down Expand Up @@ -394,7 +390,7 @@ struct ContentView: View {
if token != llava_prompt {
if token == "</s>" {
shouldStopGenerating = true
runnerHolder.runner?.stop()
runnerHolder.llavaRunner?.stop()
} else {
tokens.append(token)
if tokens.count > 2 {
Expand All @@ -410,7 +406,7 @@ struct ContentView: View {
}
}
if shouldStopGenerating {
runnerHolder.runner?.stop()
runnerHolder.llavaRunner?.stop()
}
}
}
Expand All @@ -421,7 +417,7 @@ struct ContentView: View {
try runnerHolder.runner?.generate(llama3_prompt, sequenceLength: seq_len) { token in

NSLog(">>> token={\(token)}")
if token != llama3_prompt && !shouldStopShowingToken {
if token != llama3_prompt {
// hack to fix the issue that extension/llm/runner/text_token_generator.h
// keeps generating after <|eot_id|>
if token == "<|eot_id|>" {
Expand Down Expand Up @@ -485,6 +481,7 @@ struct ContentView: View {
}
runnerQueue.async {
runnerHolder.runner = nil
runnerHolder.llavaRunner = nil
}
switch pickerType {
case .model:
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ NS_SWIFT_NAME(Runner)

- (instancetype)initWithModelPath:(NSString*)filePath
tokenizerPath:(NSString*)tokenizerPath;
- (BOOL)isloaded;
- (BOOL)isLoaded;
- (BOOL)loadWithError:(NSError**)error;
- (BOOL)generate:(NSString*)prompt
sequenceLength:(NSInteger)seq_len
Expand All @@ -36,7 +36,7 @@ NS_SWIFT_NAME(LLaVARunner)

- (instancetype)initWithModelPath:(NSString*)filePath
tokenizerPath:(NSString*)tokenizerPath;
- (BOOL)isloaded;
- (BOOL)isLoaded;
- (BOOL)loadWithError:(NSError**)error;
- (BOOL)generate:(void*)imageBuffer
width:(CGFloat)width
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ - (void)dealloc {
[ExecuTorchLog.sharedLog removeSink:self];
}

- (BOOL)isloaded {
- (BOOL)isLoaded {
return _runner->is_loaded();
}

Expand Down Expand Up @@ -128,7 +128,7 @@ - (void)dealloc {
[ExecuTorchLog.sharedLog removeSink:self];
}

- (BOOL)isloaded {
- (BOOL)isLoaded {
return _runner->is_loaded();
}

Expand Down
3 changes: 2 additions & 1 deletion extension/llm/runner/text_token_generator.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ class TextTokenGenerator {
// initialize tensor wrappers
auto tokens_managed =
from_blob(token_data.data(), token_shape, exec_aten::ScalarType::Long);

auto start_pos_managed = from_blob(&pos, {1}, exec_aten::ScalarType::Long);

should_stop_ = false;

// Generate our tokens
while (pos < seq_len - 1) {
// Run the model
Expand Down
Loading